这个题目是一道笔试题,当时没有去写,因为没有什么思路,后来自己回想了一下,准备做一下
题目是这个样子的
数组合并:
源数组:[{
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语法
}
})
}
})复制代码
输出的结果:
望大家给更多的解答思路以及方法!