javascript - 添加对象数组javascript的值
问题描述
我有一个这样的对象数组:const array=[{a:1, b:1} , {a:2, b:3} ,{a:1, b:1}]
我想要一个像 results = [{a:4 , b:5}] 这样的数组,它是根据 key 来自对象数组的所有值的总和。
我尝试过这样的事情,但有时它会跳过数组中的第一个对象:
array.reduce((acc, n) => {
for (var prop in n) {
if (acc.hasOwnProperty(prop)) acc[prop] += n[prop];
else acc[prop] = 0;
}
return acc;
}, {})
解决方案
您需要acc
在分配之前进行初始化,因此下面的小修改将起作用
const array=[{a:1, b:1} , {a:2, b:3} ,{a:1, b:1}]
const res = array.reduce((acc, n) => {
for (var prop in n) {
acc[prop] = acc[prop] || 0; // Need to initialize before assigning
if (n.hasOwnProperty(prop)) {
acc[prop] += n[prop];
}
}
return acc;
}, {})
console.log(res);
推荐阅读
- git - 重写历史是使用 git lfs 和现有 git repo 大文件的必要步骤吗?
- javascript - D3.js 旋转地图会破坏样式
- python - Django从模型数据库下载csv
- c++ - 如何在 Gtk::GLArea 中启用抗锯齿功能?
- c - 为什么我的程序卡在我的 do while 循环中?
- javascript - redux 到 redux-toolkit 重构
- html - 如何显示 3 个 div 之间的空格并将它们保持在同一行
- javascript - 启动android模拟器时出现错误消息
- dpkg - dpkg --configure -a 和 apt install 中的错误 Pepperflash
- kotlin - 为什么作为?不会在 if 块内转换变量?