例如:
const arr = [
{id:1,typeId:1,num:2},
{id:2,typeId:1,num:5},
{id:3,typeId:2,num:2},
{id:4,typeId:2,num:1},
{id:5,typeId:3,num:2},
{id:6,typeId:3,num:2},
{id:7,typeId:3,num:2},
];
如果只是去重使用map()和filter()方法就行
const res = new Map();
arr.filter((item)=>{
!res.has(item.typeId) && res.set(item.typeId,1)
});
现在我想要的是能够去重,但相同的typeId的num要累加
最后的结果希望是这样的:
const arr = [
{id:1,typeId:1,num:7},
{id:3,typeId:2,num:3},
{id:5,typeId:3,num:6},
];
不知道有什么办法能解决
###arr.reduce((list, item)=>{
if(res.has(item.typeId)){
res.get(item.typeId).num += item.num
}else{
let o = {...item}
list.push(o)
res.set(item.typeId, o)
}
return list
}, []);
###Object.values([
{id:1,typeId:1,num:2},
{id:2,typeId:1,num:5},
{id:3,typeId:2,num:2},
{id:4,typeId:2,num:1},
{id:5,typeId:3,num:2},
{id:6,typeId:3,num:2},
{id:7,typeId:3,num:2},
].reduce((res,v)=>{
if(res[v.typeId]) res[v.typeId].num += v.num;
else res[v.typeId] = v;
return res;
}, {}))
###const arr = [
{id: 1, typeId: 1, num: 2},
{id: 2, typeId: 1, num: 5},
{id: 3, typeId: 2, num: 2},
{id: 4, typeId: 2, num: 1},
{id: 5, typeId: 3, num: 2},
{id: 6, typeId: 3, num: 2},
{id: 7, typeId: 3, num: 2},
];
const map = new Map();
arr.forEach(item => {
const value = map.get(item.typeId);
if (value) {
value.num += item.num;
map.set(item.typeId, value);
} else {
map.set(item.typeId, item);
}
});
const result = [...map.values()];
console.log(result);
Object.values(arr.reduce((res, item) => {
res[item.typeId] || (res[item.typeId] = {...item, num: 0})
res[item.typeId].num += item.num;
return res;
}, {}));
###你这个不能称为去重,只能是相同typeId的累加。
理论上新的数组中不该有id属性的。