原理:需要一个新的数组存储合并后的对象,因为原对象数组中存储的有相似的对象,新数组是存储对的是对原数组合并后的对象,索引它们的索引是对不上的,这里就需要一个新数组进行标记,对已经加入到新数组的对象进行标示,再用includes()和indexOf()等方法进行判断是否已经合并过了,没合并过的直接按照需求对属性处理后加入新数组和标示数组中,新数组中有了就进行合并操作。
代码:
let list=[ { id:1, name:"测试", num:1, }, { id:1, name:"测试1", num:1, }, { id:2, name:"测试2", num:1, }, ]; let idList=[]; let newList=[]; list.forEach((item,index)=>{ if(!idList.includes(item.id)){ //新数组里面没有直接加入 newList.push({ id:item.id, num:item.num, name:[] }) newList[newList.length-1].name=item.name; idList.push(item.id); }else{ //需要合并的属性 newList[newList.length-1].num=newList[newList.length-1].num+item.num; newList[newList.length-1].name=newList[newList.length-1].name+','+item.name } })