数组对象相同的key值合并,并且把对应的ID放到一个数组

准备数据

let list = [{ name: 'a', id: 1, age: 11 }, { name: 'b', id: 2, age: 22 }, { name: 'c', id: 3, age: 33 }, { name: 'a', id: 4, age: 44 }, { name: 'b', id: 5, age: 55 }];

处理结果

[{name:'a',id:[1,4]},{name:'b',id:[2,5]},{name:'c',id:[3]}]

第一种:利用find查找的方式处理

find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。

<!--首先定义一个空数组--> var newList = [] list.forEach(item => { let newItem = newList.find((i) => i.name == item.name) if (!newItem) { console.log(newItem); newList.push({ name: item.name, id: [item.id] }) } else { newItem.id.push(item.id) } })

第二中:利用reduce方法

let Obj = list.reduce((pre,cur,index)=> { if(!pre[cur.name]){ pre[cur["name"]] =[cur.id] } else { pre[cur.name].push(cur.id) } return pre; },{}) let aff= Object.keys(Obj).map((item)=>{ console.log(item); return { name:item, id:Obj[item] }}) console.log(aff)

第三种:使用hash对象

var hash = {}; var i = 0; var res = []; list.forEach(function(item) { var name = item.name; hash[name] ? res[hash[name] - 1].id.push(item.id) : hash[name] = ++i && res.push({ id: [item.id], name: name, age: item.age }) });

第四种:使用findIndex方法

let arr2 = [] list.forEach((item, index) => { let b = arr2.findIndex(o => o.name === item.name); if (b == -1) { arr2.push({ name: item.name, age: item.age, id: [item.id] }) } else { arr2[b].id.push(item.id) } })
 
转自于:https://www.cnblogs.com/wgy0528/archive/2004/01/13/13382124.html
posted @ 2020-10-12 21:34  Ao_min  阅读(504)  评论(0编辑  收藏  举报