数组对象相同的key值合并,并且把对应的id放到一个数组
1:数组对象相同的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)
}
})