let data2 = [{ id: "5", name: "桃子", num: 1, },{ id: "1", name: "橘子", num: 1, }, { id: "2", name: "苹果", num: 1, }, { id: "3", name: "梨", num: 1, }, { id: "4", name: "土豆", num: 1, }, { id: "6", name: "洋芋", num: 7, },{ id: "7", name: "桃子", num: 8, }] // 创建新数组接收 let newdata = [] // 循环原本的数组 data2.forEach((item,index,arr)=>{ // 判断新数组中有没有当前元素item,没有的往下执行会添加 if(newdata.some((item2,index2)=>{ // newdata有一个同名就会反true if(item.name == item2.name){ return true } })===false){ // 添加及合并操作: // 将当前元素填入新数组中 newdata.push(item) // 并且循环原本数组去判断当前元素item的其他同名元素,去合并 arr.forEach((item3,index3)=>{ // 如果有同名元素,但是索引不同,就把num合并 if(item.name == item3.name&&index!==index3){ // 同名元素在新数组中一定是最后一位 newdata[newdata.length-1].num += item3.num } }) // 因为每次循环会判断新数组是否有同名元素,所以后面的同名元素会跳过这部分操作 } })