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