JS--数组对象合并

这个题目是一道笔试题,当时没有去写,因为没有什么思路,后来自己回想了一下,准备做一下

题目是这个样子的

数组合并:

源数组:[{
            teacher:'a',
            student:'Lily',
            age:20
        },{
            teacher:'a',
            student:'Lucy',
            age:22
        },{
            teacher:'a',
            student:'Meimei',
            age:22
        },{
            teacher:'b',
            student:'Sudy',
            age:21
        },{
            teacher:'b',
            student:'LeiLei',
            age:18
        }];

目标数组: [{
            teacher:'a',
            students:[{
               student:'Lily',
                age:20 
            },{
               student:'Lucy',
                age:22 
            },{
               student:'Meimei',
                age:22 
            }]
        },{
            teacher:'b',
            students:[{
               student:'Sudy',
                age:21 
            },{
               student:'LeiLei',
                age:18 
            }]
        }]复制代码



我的解答思路如下:

//源数组
        let arr = [{
            teacher:'a',
            student:'Lily',
            age:20
        },{
            teacher:'a',
            student:'Lucy',
            age:22
        },{
            teacher:'a',
            student:'Meimei',
            age:22
        },{
            teacher:'b',
            student:'Sudy',
            age:21
        },{
            teacher:'b',
            student:'LeiLei',
            age:18
        }];
        //先把源数组变成目标数组的形式
        let arrData = [];
        arr.forEach((item) => {
         let arrObj = {
            teacher:item.teacher,
            students:[]
         };
         let studentsArr = {
            student:item.student,
            age:item.age
         };
         arrObj.students.push(studentsArr);
         arrData.push(arrObj);
        })
        console.log(arrData,'-----------');
        /**
         * 先去重,后合并
         * 1、把转化后的目标数组规进行去重
         * 2、把去重后的数据和转化后的目标数组中相同teacher的数据合并students
        */
       let newArr = [];
       let newObj = {};
       arrData.forEach((item,index) => {
         if (!newObj[item.teacher]) {
            newArr.push(item);
            newObj[item.teacher] = true;
          } else {
            newArr.forEach(el => {
              if (el.teacher === item.teacher) {
                // el.students = el.students.concat(item.students);
                el.students = [...el.students, ...item.students]; // es6语法
              }
            })
          }
       })复制代码

输出的结果:



望大家给更多的解答思路以及方法!



转载于:https://juejin.im/post/5cb3fcc1e51d456e425dd987

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值