如何对reduce分组后的数组属性值求和并执行数值运算
解决方案
你当前的代码是将同id的对象分组为子数组,要实现每组qty求和,只需调整reduce的逻辑,让累加器直接存储每组的总和数值而非子数组:
var array = [ { id: "BG", qty: 100 }, { id: "BG", qty: 35 }, { id: "JP", qty: 75 }, { id: "JP", qty: 50 } ] // 按id分组并求和qty var result = array.reduce((sumObj, current) => { // 若当前id还未在累加对象中,初始值设为0,再加上当前qty sumObj[current.id] = (sumObj[current.id] || 0) + current.qty; return sumObj; }, {}); console.log(result); // 输出: { BG: 135, JP: 125 }
关于你提到的BG总和为35的说明
如果确实需要BG的结果为35(而非100+35的135),这更像是保留每组最后一个对象的qty值而非求和,此时逻辑可调整为:
var result = array.reduce((obj, current) => { // 直接用当前对象的qty覆盖之前的值 obj[current.id] = current.qty; return obj; }, {}); console.log(result); // 输出: { BG: 35, JP: 50 }
后续数学运算示例
得到求和结果后,你可以直接对这些数值执行条件运算,比如:
// 判断JP的总和是否大于100 if (result.JP > 100) { console.log("JP的qty总和超过100"); } // 计算BG和JP的总和差值 const diff = result.JP - result.BG; console.log(`JP与BG的qty差值为: ${diff}`);
内容的提问来源于stack exchange,提问作者kingsdisease
相关产品推荐
相关产品推荐

