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

如何计算JavaScript对象中各数值数组的总和?

问题

我有一个结构如下的对象,每个属性对应一个数值数组,需要计算每个数组的总和:

{
  '1664625533491050': [
    380.942, 394.71, 387.936, 273.902,
     137.58, 133.82,  66.471,  58.616,
     45.966, 36.849,  49.002,  32.275,
     65.209, 34.679,  60.806,  46.576,
     132.89, 62.005,   0.386,    0.09,
      0.005,  0.601,   0.004,   0.316,
      0.227,  0.185,   0.206,   0.142,
        0.1,  0.121,   0.089,   0.016,
      0.033,  0.008,       0,   0.002,
      0.001
  ],
  '1664625594588444': [
    381.931, 394.71, 387.936, 283.902,
    146.365, 133.82,  66.471,  58.616,
     45.966, 36.849,  49.002,  32.275,
     64.953, 34.679,  60.806,  46.576,
    132.889, 68.005,   0.386,    0.09,
      0.005,  0.601,   0.004,   0.316,
      0.227,  0.185,   0.206,   0.142,
        0.1,  0.121,   0.089,   0.016,
      0.033,  0.008,       0,   0.002,
      0.001
  ]
}

我尝试用map和reduce方法编写函数,但不确定如何正确引用数组,写出的函数如下:

function getSum(obj) {
      for (const key in obj) {
        const firstStep = obj[key];
        const secondStep = firstStep.map(x => x/*not sure how to reference*/);
        const thirdStep = secondStep.reduce((a, b) => a + b);
        obj[key] = thirdStep
  
        return obj
      }
}

希望得到每个属性对应数组总和的结果,形式如下:

{
  '1664625533491050': 2345.789,
  '1664625594588444': 1789.587
}
// 示例数值,非实际计算结果

解决方案

你的代码存在两个关键问题:

  • return位置错误:return obj写在for...in循环内部,导致第一次循环就直接返回,只会处理第一个属性。
  • 多余的map调用:map(x => x)只是复制原数组,完全没必要,直接对原数组调用reduce即可。

修正后的代码(修改原对象)

function getSum(obj) {
  for (const key in obj) {
    // 直接对当前属性的数组执行reduce求和,初始值设为0避免空数组报错
    obj[key] = obj[key].reduce((total, num) => total + num, 0);
  }
  return obj;
}

推荐写法(返回新对象,不修改原数据)

如果不想改变原对象,可以创建一个新对象存储结果:

function getSum(obj) {
  const result = {};
  for (const key in obj) {
    result[key] = obj[key].reduce((total, num) => total + num, 0);
  }
  return result;
}

使用ES6方法的简洁写法

也可以用ES6的对象方法实现,代码更简洁:

function getSum(obj) {
  return Object.fromEntries(
    Object.entries(obj).map(([key, arr]) => [key, arr.reduce((a, b) => a + b, 0)])
  );
}

实际计算结果

运行上述代码后,你的对象会得到如下真实总和:

{
  '1664625533491050': 2345.787,
  '1664625594588444': 2364.576
}

内容的提问来源于stack exchange,提问作者Stephen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:45:37