当阵列中只有一个元素时,减少一个对象数组

时间:2016-03-13 18:08:28

标签: javascript

假设我有这个数组[{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函数。

2 个答案:

答案 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