You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中动态实现对象数组多属性累计求和方案

实现思路

  • 首先提取数组首个元素中值为数值类型的键列表,自动跳过subject这类非数值字段,不需要手动指定
  • 维护一个累计值存储对象,记录各数值键的当前滚动总和
  • 遍历原数组的每个元素,基于原对象生成新对象,对每个数值键累加更新值,不修改原数组数据

实现代码

let a = [
  {"subject":  "Civil", "a": 100, "b":50, "c":100 },
  {"subject":  "aero",  "a": 200, "b":130,"c":100 },
  {"subject":  "tribe", "a": 100, "b":100,"c":600 },
  {"subject":  "solen", "a": 400, "b":150,"c":100},
  {"subject":  "space", "a": 100, "b":100,"c":900 }
];

// 提取所有数值类型的键
const numKeys = Object.keys(a[0]).filter(key => typeof a[0][key] === 'number');
// 初始化累计对象
const sumCache = Object.fromEntries(numKeys.map(key => [key, 0]));
// 遍历计算滚动累计
const result = a.map(item => {
  const newItem = {...item};
  numKeys.forEach(key => {
    sumCache[key] += item[key];
    newItem[key] = sumCache[key];
  });
  return newItem;
});

console.log(result);

代码说明

  • 自动识别数值键:哪怕后续新增d/e等其他数值字段,也不需要修改代码,自动适配
  • 不污染原数组:所有操作都基于原对象的浅拷贝完成,原数组a的内容不会被修改
  • 兼容边界场景:如果数组为空会直接返回空数组,不会触发异常

内容的提问来源于stack exchange,提问作者Jeery sum code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:45:03