javascript - 如果字典中的所有其他元素都相同,则对计数求和
问题描述
我有一个字典数组,如下所示:
[{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)
推荐阅读
- dart - VSCode - 关闭省略类型注释警告
- haskell - 提升内部延续
- android - 在 Kotlin 的 xml 数组中在 ImageButton 上设置 mipmap 图像?
- java - 如何使用 math.random 重新随机化网格上的图
- docker - 使用 Travis CI 将 Docker Image 部署到 CF
- javascript - 使用 worker 启动 Node.js 项目
- react-native - 安装反应本机设置时出错
- reactjs - 如何使用 reactjs 在一个 ui 中显示内容
- r - 我应该使用 sapply 来运行不需要参数的模拟吗?
- python - Python 日志不会记录 pd.info()