javascript вложенный Json объект из плоского объекта - PullRequest
0 голосов
/ 04 августа 2020

как создать вложенный объект Json из плоского объекта. если код hod и dep одинаков для разных объектов, добавьте один и тот же вложенный объект. ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///// мой плоский объект == >>

flatObj = [
    {
        hod          : '1000',
        dep          : '2',
        teacher      : 'avi',
        teacherno    : '121',
        teacheradd   : 'mumbai',
        teacheraddno : '133',
        billtoname   : 'manisha',
        billtono     : '77',
        payname      : 'mann',
        payno        : '99'
    },
    {
        hod          : '1567',
        dep          : '2',
        teacher      : 'shetty',
        teacherno    : '166',
        teacheradd   : 'gujrat',
        teacheraddno : '190',
        billtoname   : 'annu',
        billtono     : '87',
        payname      : 'kiru',
        payno        : '495'
    },
    {
        hod          : '1567',
        dep          : '2',
        teacher      : 'shetty',
        teacherno    : '166',
        teacheradd   : 'gujrat',
        teacheraddno : '190',
        billtoname   : 'raina',
        billtono     : '03',
        payname      : 'kiru',
        payno        : '495'
    },
    {
        hod          : '1000',
        dep          : '2',
        teacher      : 'kisha',
        teacherno    : '654',
        teacheradd   : 'pune',
        teacheraddno : '986',
        billtoname   : 'kittu',
        billtono     : '576',
        payname      : 'hayat',
        payno        : '96'
    }
];
 

, и мне нужен мой вложенный объект, например

nestedObj = [
    {
        hod        : '1000',
        dep        : '2',
        teacherArr : [
            {
                teacher       : 'avi',
                teacherno     : '121',
                teacheraddArr : [
                    {
                        teacheradd   : 'mumbai',
                        teacheraddno : '133',
                        billtoArr    : [
                            {
                                billtoname : 'manisha',
                                billtono   : '77',
                                payerArr   : [
                                    {
                                        payname : 'mann',
                                        payno   : '99'
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                teacher       : 'kisha',
                teacherno     : '654',
                teacheraddArr : [
                    {
                        teacheradd   : 'pune',
                        teacheraddno : '986',
                        billtoArr    : [
                            {
                                billtoname : 'kittu',
                                billtono   : '576',
                                payerArr   : [
                                    {
                                        payname : 'hayat',
                                        payno   : '96'
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        hod        : '1567',
        dep        : '2',
        teacherArr : [
            {
                teacher       : 'shetty',
                teacherno     : '166',
                teacheraddArr : [
                    {
                        teacheradd   : 'gujrat',
                        teacheraddno : '190',
                        billtoArr    : [
                            {
                                billtoname : 'annu',
                                billtono   : '87',
                                payerArr   : [
                                    {
                                        payname : 'kiru',
                                        payno   : '495'
                                    }
                                ]
                            },
                            {
                                billtoname : 'raina',
                                billtono   : '03',
                                payerArr   : [
                                    {
                                        payname : 'kiru',
                                        payno   : '495'
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
];

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Вы можете взять массив желаемых вложенных групп с их объединенным ключом и массивом для более низкой вложенной группы.

В конце pu sh остальные неиспользуемые свойства для самого вложенного массива.

const
    data = [{ hod: '1000', dep: '2', teacher: 'avi', teacherno: '121', teacheradd: 'mumbai', teacheraddno: '133', billtoname: 'manisha', billtono: '77', payname: 'mann', payno: '99' }, { hod: '1567', dep: '2', teacher: 'shetty', teacherno: '166', teacheradd: 'gujrat', teacheraddno: '190', billtoname: 'annu', billtono: '87', payname: 'kiru', payno: '495' }, { hod: '1000', dep: '2', teacher: 'kisha', teacherno: '654', teacheradd: 'pune', teacheraddno: '986', billtoname: 'kittu', billtono: '576', payname: 'hayat', payno: '96' }],
    groups = [
        [['hod', 'dep'], 'teacherArr'],
        [['teacher', 'teacherno'], 'teacheraddArr'],
        [['teacheradd', 'teacheraddno'], 'billtoArr'],
        [['billtoname', 'billtono'], 'payerArr']
    ],
    result = data.reduce((r, o) => {
        groups
            .reduce((t, [keys, array]) => {
                let temp = t.find(q => keys.every(k => o[k] === q[k])),
                    _;
                if (!temp) t.push(temp = { ...Object.fromEntries(keys.map(k => [k, o[k]])), [array]: [] });
                keys.forEach(k => ({ [k]: _, ...o } = o));
                return temp[array];
            }, r)
            .push(o);
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 04 августа 2020

Я написал код, конвертирующий предоставленный вами flatObj в предоставленный вами nestedObj. Вы не указали никаких критериев, поэтому он может работать не так, как вы хотите.

Edit добавил много if else для проверки каждого шага.

flatObj = [{
    hod: '1000',
    dep: '2',
    teacher: 'avi',
    teacherno: '121',
    teacheradd: 'mumbai',
    teacheraddno: '133',
    billtoname: 'manisha',
    billtono: '77',
    payname: 'mann',
    payno: '99'
  },
  {
    hod: '1567',
    dep: '2',
    teacher: 'shetty',
    teacherno: '166',
    teacheradd: 'gujrat',
    teacheraddno: '190',
    billtoname: 'annu',
    billtono: '87',
    payname: 'kiru',
    payno: '495'
  },
  {
    hod: '1567',
    dep: '2',
    teacher: 'shetty',
    teacherno: '166',
    teacheradd: 'gujrat',
    teacheraddno: '190',
    billtoname: 'raina',
    billtono: '03',
    payname: 'kiru',
    payno: '495'
  },
  {
    hod: '1000',
    dep: '2',
    teacher: 'kisha',
    teacherno: '654',
    teacheradd: 'pune',
    teacheraddno: '986',
    billtoname: 'kittu',
    billtono: '576',
    payname: 'hayat',
    payno: '96'
  }
];

const nestedObj = [];

flatObj.forEach(item => {
  if (!nestedObj.some(x => x.hod == item.hod && x.dep == item.dep)) {
    nestedObj.push({
      hod: item.hod,
      dep: item.dep,
      teacherArr: []
    });
  }
  const teacherArr = nestedObj.find(x => x.hod == item.hod && x.dep == item.dep).teacherArr;
  if (!teacherArr.some(x => x.teacher == item.teacher && x.teacherno == item.teacherno)) {
    teacherArr.push({
      teacher: item.teacher,
      teacherno: item.teacherno,
      teacheraddArr: []
    });
  }
  const teacheraddArr = teacherArr.find(x => x.teacher == item.teacher && x.teacherno == item.teacherno).teacheraddArr;
  if (!teacheraddArr.some(x => x.teacheradd == item.teacheradd && x.teacheraddno == x.teacheraddno)) {
    teacheraddArr.push({
      teacheradd: item.teacheradd,
      teacheraddno: item.teacheraddno,
      billtoArr: []
    });
  }
  const billtoArr = teacheraddArr.find(x => x.teacheradd == item.teacheradd && x.teacheraddno == x.teacheraddno).billtoArr;
  if (!billtoArr.some(x => x.billtoname == item.billtoname && x.billtono == item.billtono)) {
    billtoArr.push({
      billtoname: item.billtoname,
      billtono: item.billtono,
      payerArr: []
    });
  }
  const payerArr = billtoArr.find(x => x.billtoname == item.billtoname && x.billtono == item.billtono).payerArr;
  payerArr.push({
    payname: item.payname,
    payno: item.payno
  });
})

console.log(nestedObj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...