javascript - 如何在对象数组中减去具有相似键的对象值?(不要与删除重复项混淆)
问题描述
假设我有一个对象
const testArray = [{key: 'a', value: 5}, {key: 'b', value: 1}, {key: 'a', value: 2}]
我想要的是
newArray = [{key: 'a', value: 3}, {key: 'b', value: 1}]
我尝试的是
testArray.reduce((acc, cur, index) => {
const exists = !!acc && acc.find(item => item.key === cur.key)
if (!exists){
acc.push(cur)
} else {
// can't figure out what i should do here
}
return acc;
}, [])
否则,任何其他简单的解决方案都会受到赞赏。
谢谢
解决方案
请注意,当您使用 时Array#find
,结果值将保留引用。因此,当您更改内容时,它会影响数组acc
。
const testArray = [{key: 'a', value: 5}, {key: 'b', value: 1}, {key: 'a', value: 2}];
const result = testArray.reduce((acc, cur) => {
const exists = acc.find(item => item.key === cur.key)
if (!exists) acc.push(cur);
else exists.value -= cur.value;
return acc;
}, []);
console.log(result);
推荐阅读
- tabulator - 有没有办法像 jQuery 一样通过选择器获取 Tabulator 对象?
- javascript - babel 7 忽略当前目录之外的文件
- .net - Visual Studio 2012 离线安装 nuget
- java - 如何修复证书中的主机名不匹配
- spring-batch - 终止批处理但没有回滚的异常
- php - PHP MYSQL 在重复条目上显示错误消息
- c# - 我想使用 c# 或 sql 搜索带有掩码 (XXXX-XX-XX) 日期的数据库表
- ruby-on-rails - 如何在 Rails 中提供 erb 文件作为蛋白石模板?
- bash - 排序变量
- c# - 以编程方式针对 SP16 中文件上传的默认文档库