JavaScript中利用关联ID对JSON数组内对象属性值求和的最佳实践
解决方案
实现思路
- 从
property1中动态提取需要统计的属性名,完全避免硬编码,后续属性增减无需修改统计逻辑 - 仅遍历1次
property2数组即可完成所有属性的求和,相比多次循环的实现性能更高 - 输出结构化的统计结果,支持单独获取单个属性的总和,也可快速计算所有属性的总合计值
代码实现
function calculateTotal(testJson) { // 动态提取需要统计的属性列表 const statKeys = testJson.property1.map(item => item.id); // 初始化统计结果对象,所有属性初始值为0 const statResult = statKeys.reduce((prev, key) => { prev[key] = 0; return prev; }, {}); // 单次遍历完成所有属性累加 testJson.property2.forEach(item => { statKeys.forEach(key => { // 增加兜底逻辑,避免属性不存在时出现NaN statResult[key] += item[key] || 0; }); }); return statResult; } // 调用示例 const totalResult = calculateTotal(testJson); // 取abc总和:totalResult.abc → 74 // 取def总和:totalResult.def → 38 // 所有属性总合计:Object.values(totalResult).reduce((sum, curr) => sum + curr, 0) → 112
优势说明
如果后续property1新增了其他id值,只要property2的对象中存在对应属性,不需要修改统计函数的代码即可自动适配,适配动态属性的场景需求,维护成本远低于独立函数硬编码的实现。
内容的提问来源于stack exchange,提问作者user17043756
相关产品推荐
相关产品推荐

