javascript - 如何首先组合对象的属性,然后使用 Javascript 删除对象数组中的重复项
问题描述
我在这里有一个对象数组:
const arr = [
{ id: 1, name: "test1", quantity:1 },
{ id: 2, name: "test2", quantity:1 },
{ id: 2, name: "test3", quantity:1 },
{ id: 3, name: "test4", quantity:1 },
{ id: 4, name: "test5", quantity:1 },
{ id: 5, name: "test6", quantity:1 },
{ id: 5, name: "test7", quantity:1 },
{ id: 6, name: "test8", quantity:1 }
];
我想在删除它们之前一起添加数量的重复对象
所以结果是:
const arr = [
{ id: 1, name: "test1", quantity:1 },
{ id: 2, name: "test3", quantity:2 },
{ id: 3, name: "test4", quantity:1 },
{ id: 4, name: "test5", quantity:1 },
{ id: 5, name: "test6", quantity:2 },
{ id: 6, name: "test8", quantity:1 }
];
我已经看到它的变体使用 map 或 reduce 删除了重复项,但我还没有看到任何可以在不使用太多循环的情况下以雄辩的方式完成的任务。
我一直在思考如何最好地完成这一天并没有找到任何东西,任何帮助将不胜感激
解决方案
您可以将 reduce 与对象一起使用来存储具有每个 id 的元素。
const arr = [
{ id: 1, name: "test1", quantity:1 },
{ id: 2, name: "test2", quantity:1 },
{ id: 2, name: "test3", quantity:1 },
{ id: 3, name: "test4", quantity:1 },
{ id: 4, name: "test5", quantity:1 },
{ id: 5, name: "test6", quantity:1 },
{ id: 5, name: "test7", quantity:1 },
{ id: 6, name: "test8", quantity:1 }
];
const res = Object.values(
arr.reduce((acc,curr)=>{
acc[curr.id] = acc[curr.id] || {...curr, quantity: 0};
acc[curr.id].quantity += curr.quantity;
return acc;
}, {})
);
console.log(res);
推荐阅读
- facebook - 无法在 facebook 中创建 ad_creative、advert 和 leadgen 表单?
- angularjs - 输入类型号只允许一位数字
- algorithm - 当递归树的 T(1) = 0 时找到深度
- security - 如何使用 Keycloak REST API 更改 Keycloak loginId
- python - 来自另一个文件的烧瓶级路由
- azure - Azure 策略、集成测试
- android - Android Facebook登录,onActivityResult中callbackManager尚未初始化
- c++ - 比较:文档差异
- angular - 错误 TS7006:参数“_”隐式具有“任何”类型
- google-coral - Google Coral 开发板 - 设置热跳闸点 - 风扇不会旋转