如何给JavaScript对象数组添加累加count的sum键或更新count为累加值?
给对象数组添加累加求和字段或替换count为累加值
问题描述
我有如下格式的对象数组:
[{date: '01-01-2022' , count: 1}, {date: '02-01-2022' , count: 2}, {date: '05-01-2022' , count: 9}]
期望得到两种结果之一:
第一种(新增sum字段):
[{date: '01-01-2022' , count: 1 , sum: 1}, {date: '02-01-2022' , count: 2 , sum: 3}, {date: '05-01-2022' , count: 9 , sum: 12}]
第二种(替换count为累加值):
[{date: '01-01-2022' , count: 1}, {date: '02-01-2022' , count: 3}, {date: '05-01-2022' , count: 12}]
我能单独累加count数组:
let new_array = []; myarray.reduce( (prev, curr,i) => new_array[i] = prev + curr , 0 ) return (new_array);
但没法在原对象数组里实现这个功能,也不知道怎么给原对象添加累加后的键。
解决方案
方案1:新增sum字段(不修改原数组)
利用reduce遍历数组,维护累加值,每次生成包含sum字段的新对象:
const originalArray = [{date: '01-01-2022' , count: 1}, {date: '02-01-2022' , count: 2}, {date: '05-01-2022' , count: 9}]; const resultWithSum = originalArray.reduce((acc, curr) => { // 取上一个元素的sum值,初始为0 const currentSum = (acc.length ? acc[acc.length - 1].sum : 0) + curr.count; // 复制原对象并添加sum字段,推入结果数组 acc.push({ ...curr, sum: currentSum }); return acc; }, []); console.log(resultWithSum);
方案2:替换count为累加值(不修改原数组)
同样通过reduce,将count替换为累加后的数值:
const originalArray = [{date: '01-01-2022' , count: 1}, {date: '02-01-2022' , count: 2}, {date: '05-01-2022' , count: 9}]; const resultWithCumulativeCount = originalArray.reduce((acc, curr) => { // 计算累加值 const cumulative = (acc.length ? acc[acc.length - 1].count : 0) + curr.count; // 复制原对象并更新count,推入结果数组 acc.push({ ...curr, count: cumulative }); return acc; }, []); console.log(resultWithCumulativeCount);
补充说明
- 上述代码均生成新数组,不会修改原数据,避免意外副作用。
- 如果需要直接修改原数组,可以去掉对象展开语法,直接给原对象添加sum属性或修改count值,但不推荐这种操作,容易引发数据污染问题。
内容的提问来源于stack exchange,提问作者leonleprofessionnel
相关产品推荐
相关产品推荐

