假设我有这个数组[{num:1}, {num:2}, {num:3}]
。我可以做以下事情 -
[{num:1}, {num:2}, {num:3}].reduce((a, b) => a.num === undefined? a + b.num : a.num + b.num)
我得到" 6",太棒了!但是,如果我的数组只有一个元素(比如说我用循环动态填充我的数组,需要在每次迭代时减少),那就像[{num:1}]
那样做 -
[{num:1}].reduce((a, b) => a.num === undefined? a + b.num : a.num + b.num)
我得到" {num:1}"这是有意义的(如果只有一个元素返回该元素)。
那么有什么方法可以使用reduce
函数并获得"正确的"回答(即" 1")以获得上述答案。
我意识到我可能只是创建我自己的函数(循环数组,总结我去并返回总数)但我有兴趣看看是否可以使用reduce函数。
答案 0 :(得分:5)
是的,您可以提供初始值0
:
array.reduce(
(a, b) => a + b.num,
0 // <-- initial value
);
它也适用于空数组(返回0
)。
答案 1 :(得分:1)
两个答案:
1)
[{ num: 6 }].reduce(function (a, b) { return a + b.num; }, 0);
// note the starting-value for A, passed into reduce.
2)
[{ num: 6 }].map(el => el.num).reduce((a, b) => a + b, 0);
// I should still pass the starting-value,
// but here I've mapped all of the elements first,
// into the same type that the reduce is expecting,
// thus simplifying the reduce to be a simple add function