如何在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
相关产品推荐
相关产品推荐

