curr 在对象数组的 reduce 中未定义

curr is undefined in reduce on array of objects

作为输入,我有一个对象数组,这些对象中的每一个都有许多属性, 我想要一个输出,它也是一组具有相同属性的对象,除了一个 属性 我想将其更改为累积值外,其他属性不变。 输入示例:

 let input_array = [{ a:'a',b:'b',c: 1},{a:'d',b:'e',c:2},{a:'g',b:'h',c: 3}];

输出示例

let output_array = [{ a:'a',b:'b',c: 1},{a:'d',b:'e',c:3},{a:'g',b:'h',c: 6}];

这是我尝试过的方法:

let output_array = [];
input_array.reduce((acc, curr) => {
    output_array.push({
        a: curr.a,
        b: curr.b,
        c : acc.c + curr.c
    })       
},0);

我一直收到 c NaN 和 acc undefined 。

在这种情况下,我更喜欢 .map 一个数组而不是另一个数组,并保留一个包含累积 c:

的变量

const input = [{ a:'a',b:'b',c: 1},{a:'d',b:'e',c:2},{a:'g',b:'h',c: 3}];

const output = input.map(((acc) => ({ c, ...rest }) => ({ ...rest, c: acc += c }))(0));

console.log(output);

如果您实际上 return 来自减速器的新累加器,那么您的解决方案肯定也有效:

const input = [{ a:'a',b:'b',c: 1},{a:'d',b:'e',c:2},{a:'g',b:'h',c: 3}];
const output = [];

input.reduce((acc, curr) => {
    acc = acc + curr.c;
    output.push({ ...curr, c: acc });
    return acc;    
},0);

console.log(output);