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

如何在TypeScript的对象数组中实现历史值累计计算

实现数组对象的累计生产值计算

嘿,我来帮你搞定这个累计计算的需求!你需要给数组里每个周期的accumulated字段计算从第一个周期到当前周期的所有production值之和,对吧?下面是具体的实现思路和代码示例:

核心逻辑

要实现这个需求,关键是维护两个全局的累计变量(分别对应D和P的总和),然后按顺序遍历数组中的每个元素:

  • 每处理一个元素,就把当前元素的production.D和production.P加到对应的累计变量里
  • 把更新后的累计值直接赋值给当前元素的accumulated对象
  • 继续处理下一个元素,直到遍历完整个数组

注意:一定要保证数组是按时间顺序排列的哦!如果原始数组的顺序不对,需要先根据timestamp字段排序。

代码示例(JavaScript)

// 示例输入数组,包含多个周期的数据
const registries = [
  {
    "period_range": "05:00 - 06:00",
    "timestamp": "2021-11-09T08:45:00.000Z",
    "production": { "D": 5, "P": 2 },
    "accumulated": { "D": 0, "P": 0 },
  },
  {
    "period_range": "06:00 - 07:00",
    "timestamp": "2021-11-09T09:45:00.000Z",
    "production": { "D": 3, "P": 3 },
    "accumulated": { "D": 0, "P": 0 },
  },
  {
    "period_range": "07:00 - 08:00",
    "timestamp": "2021-11-09T10:45:00.000Z",
    "production": { "D": 4, "P": 1 },
    "accumulated": { "D": 0, "P": 0 },
  }
];

// 先确保数组按时间顺序排序(如果原始数组已经有序可以跳过这步)
registries.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));

// 初始化累计值
let totalD = 0;
let totalP = 0;

// 遍历数组计算累计
registries.forEach(registry => {
  // 累加当前周期的生产值到全局累计变量
  totalD += registry.production.D;
  totalP += registry.production.P;
  
  // 更新当前元素的accumulated字段
  registry.accumulated.D = totalD;
  registry.accumulated.P = totalP;
});

// 输出结果验证
console.log(registries);

运行结果说明

执行上面的代码后,每个元素的accumulated会被正确更新:

  • 05:00-06:00周期:accumulated.D = 5,accumulated.P = 2(仅当前周期值)
  • 06:00-07:00周期:accumulated.D = 5+3=8,accumulated.P = 2+3=5(前一个周期+当前周期)
  • 07:00-08:00周期:accumulated.D = 8+4=12,accumulated.P =5+1=6(前两个周期+当前周期)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:58:16