首页 > 解决方案 > 如何在对象数组中减去具有相似键的对象值?(不要与删除重复项混淆)

问题描述

假设我有一个对象

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;
}, [])

否则,任何其他简单的解决方案都会受到赞赏。

谢谢

标签: javascriptarraysobject

解决方案


请注意,当您使用 时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);


推荐阅读