如何对多组对象数组中的对象属性分别求和?
解决每组对象数组独立求和的问题
你的问题出在使用了全局的total变量——每次循环都会把所有组的price值累加到同一个变量里,最后自然只能得到所有组的总和。要获取每组独立的求和结果,我们需要为每个组单独维护一个累加值,最后把这些结果存储起来。
这里提供两种简单的修改方案:
方案1:使用局部累加变量+对象存储结果
// 初始化一个空对象,用来保存每个组的求和结果 const sumByGroup = {}; for (const key of Object.keys(result)) { // 为当前组初始化一个局部累加变量,只负责当前组的计算 let groupTotal = 0; result[key].forEach(element => { // 注意:这里要和你对象里的属性名保持一致,示例里是price,你代码里写的是Price,要统一! groupTotal += element.price; }); // 把当前组的结果存入对象 sumByGroup[key] = groupTotal; } console.log(sumByGroup); // 输出结果:{ obj1: 30, obj2: 10, obj3: 20 }
方案2:使用reduce简化代码
数组的reduce方法天生适合做累加计算,可以让代码更简洁:
const sumByGroup = {}; for (const key of Object.keys(result)) { // 用reduce直接计算当前组的总和,初始值设为0 sumByGroup[key] = result[key].reduce((accumulator, currentItem) => { return accumulator + currentItem.price; }, 0); } console.log(sumByGroup); // 输出结果同样是:{ obj1: 30, obj2: 10, obj3: 20 }
注意事项
- 确保属性名大小写一致:你示例里的对象属性是
price,但代码里写的是element.Price,如果实际对象里是小写的price,大写的写法会得到NaN,一定要统一!
内容的提问来源于stack exchange,提问作者SeventhWarhawk
相关产品推荐
相关产品推荐

