JavaScript中按行累加键值对数值的实现方法
按行累加数组对象数值的解决方案
没问题,我来帮你搞定这个需求!你需要遍历数组里的每个对象,把对象内的数字值逐一累加,最后把结果存储下来对吧?下面我用JavaScript给出两种实用的实现方式,你可以根据自己的场景选择:
通用方案(适配任意数字键)
如果你的对象里的数字键不固定(比如后续可能新增其他数字类型的键),这种通用方法最稳妥:
首先假设你的原始数组是这样的:
const data = [ {20: 24, 30: 37, 40: 17, 50: 16, 60: 5, 70: 2, day: "1"}, {20: 12, 30: 25, 40: 19, 50: 8, 60: 3, 70: 1, day: "2"}, // 更多对象项... ];
方式1:给每个对象添加累加结果字段
这种方式会保留原数据,同时在每个对象里新增一个total字段存储累加值:
const dataWithTotals = data.map(item => { // 筛选出所有数字类型的值,排除day这类非数字字段 const numericValues = Object.values(item).filter(val => typeof val === 'number'); // 用reduce计算总和,初始值设为0避免空数组报错 const total = numericValues.reduce((accumulator, current) => accumulator + current, 0); // 返回包含原数据和total的新对象(不修改原数组) return {...item, total}; });
执行后,dataWithTotals里的每个对象会变成这样:
{20: 24, 30: 37, 40: 17, 50: 16, 60: 5, 70: 2, day: "1", total: 101}
方式2:单独收集所有累加结果
如果你只需要所有行的累加值组成的数组,可以这样写:
const totalArray = data.map(item => { return Object.values(item) .filter(val => typeof val === 'number') .reduce((sum, num) => sum + num, 0); });
执行后totalArray会是[101, 68, ...]这样的纯数值数组。
固定键的高效方案
如果你的对象里的数字键是固定的(比如永远是20、30、40、50、60、70这几个),直接指定键累加会更高效:
const dataWithTotals = data.map(item => { const total = item[20] + item[30] + item[40] + item[50] + item[60] + item[70]; return {...item, total}; });
这种方式不需要遍历所有值,性能更好,适合键固定的场景。
内容的提问来源于stack exchange,提问作者S.Diksha
相关产品推荐
相关产品推荐

