陣列物件相同的key值合併,並且把對應的id放到一個數組
阿新 • • 發佈:2020-07-26
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
})
});