我有一个字典数组,如下所示:
[{name:'v1', count:1}, {name:'v1', count:1}, {name:'v2', count:1}, {name:'v2', count:1}]
如果名称相同并形成如下字典,我如何将这些计数相加:
[{name:'v1', count:2}, {name:'v2', count:2}]
我有一个字典数组,如下所示:
[{name:'v1', count:1}, {name:'v1', count:1}, {name:'v2', count:1}, {name:'v2', count:1}]
如果名称相同并形成如下字典,我如何将这些计数相加:
[{name:'v1', count:2}, {name:'v2', count:2}]
解决方案依赖Array.prototype.reduce,Object.entries和Array.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)