JS 对象数组根据某一相同key合并成新的数组
在平常工作中,我们经常遇到各种数据处理,尤其是数组对象的处理比如我遇到的一组数据如下:let array = [{ name: '小明',age: 20,school: '清华' },{ name: '小红',age: 21,school: '清华' },{ name: '小白',age: 18,school: '北大' },{ name: '小黄',age: 19,school: '北大' },
·
在平常工作中,我们经常遇到各种数据处理,尤其是数组对象的处理
比如我遇到的一组数据如下:
let array = [
{ name: '小明',age: 20,school: '清华' },
{ name: '小红',age: 21,school: '清华' },
{ name: '小白',age: 18,school: '北大' },
{ name: '小黄',age: 19,school: '北大' },
{ name: '小浪',age: 21,school: '哈佛' },
]
需要将其处理成:
let data = [
{
school: "清华",
children: [
{ name: "小明", age: 20, school: "清华" },
{ name: "小红", age: 21, school: "清华" },
]
},
{
school: "北大",
children: [
{ name: "小白", age: 18, school: "北大" },
{ name: "小黄", age: 19, school: "北大" },
]
},
{
school: "哈佛",
children: [
{ name: "小浪", age: 21, school: "哈佛" },
]
},
]
刚开始我还犯难,牛肯南瓜,后来慢慢地遇到的多了就熟悉了,也总结了几个方法
1、使用空对象接收数据(最开始最常用的)
let object = {}
array.forEach((item) => {
let { school } = item
if (!object[school]) {
object[school] = {
school,
children: []
}
}
object[school].children.push(item)
})
console.log(Object.values(object))
2、使用findIndex方法
let arr2 = []
array.forEach((item, index) => {
let has = arr2.findIndex(o => o.school === item.school);
if (has == -1) {
arr2.push({
school: item.school,
age: item.age,
children: [item]
})
} else {
arr2[has].children.push(item)
}
})
3、利用find查找来处理
let newList = []
array.forEach(item => {
let newItem = newList.find((i) => i.school == item.school)
if (!newItem) {
newList.push({ school: item.school, children: [item] })
} else {
newItem.children.push(item)
}
})
4、使用hash对象(这个我自己不怎么常用)
let hash = {};
let index = 0;
let array1 = [];
array.forEach(function(item) {
let school = item.school;
hash[school] ? array1[hash[school] - 1].children.push(item) : hash[school] = ++index && res.push(
{
children: [item],
school: school,
age: item.age
}
)
})
5、最后一个就是利用reduce方法进行处理
let Obj = array.reduce((pre,cur,index)=> {
if(!pre[cur.school]){
pre[cur["school"]] =[cur]
} else {
pre[cur.school].push(cur)
}
return pre;
},{})
let aff= Object.keys(Obj).map((item)=>{
return {
school:item,
children:Obj[item]
}
})
综上,处理这种数据有很多的方法,也肯定有比我的更好的,但我希望能帮到需要帮助的小可爱们
更多推荐
已为社区贡献2条内容
所有评论(0)