首页 > 解决方案 > 如果字典中的所有其他元素都相同,则对计数求和

问题描述

我有一个字典数组,如下所示:

[{name:'v1', count:1}, {name:'v1', count:1}, {name:'v2', count:1}, {name:'v2', count:1}]

如果名称相同并形成如下字典,我如何将这些计数相加:

[{name:'v1', count:2}, {name:'v2', count:2}]

标签: javascript

解决方案


解决方案依赖Array.prototype.reduce,Object.entriesArray.protype.map:

const data = [{name:'v1', count:1}, {name:'v1', count:1}, {name:'v2', count:1}, {name:'v2', count:1}]

const result = Object.entries(data.reduce(
  (acc, { name, count }) => {
    acc[name] = count + (acc[name] || 0)
    return acc
  },
  {}
)).map(([name, count]) => ({ name, count }))

console.log(result)

以下是将相同的解决方案分为多个部分以使其更易于理解:

const data = [{name:'v1', count:1}, {name:'v1', count:1}, {name:'v2', count:1}, {name:'v2', count:1}]

const r1 = data.reduce(
  (acc, { name, count }) => {
    acc[name] = count + (acc[name] || 0)
    return acc
  },
  {}
)
console.log(r1)

const r2 = Object.entries(r1)
console.log(r2)

const r3 = r2.map(([name, count]) => ({ name, count }))
console.log(r3)


推荐阅读