数组减少:如何处理以前的过滤器中的空数组?

时间:2018-09-25 13:46:05

标签: javascript

我有一个被过滤的数组,可能导致新数组为空。之后,我在其上执行了一个reducer函数,然后在一个空数组上失败了:

未捕获的TypeError:减少没有初始值的空数组

如果过滤器返回空数组,我如何在reduce之前中断?

代码

var array = [5, 6, 7, 8, 9];

var sum = array
  .filter((a) => a < 5)
  .reduce((a, b) => a + b)

console.log(sum);

3 个答案:

答案 0 :(得分:2)

reduce提供一个初始值作为第二个参数。在这种情况下,由于它是一个总和,因此适当的值大概是0

var array = [5, 6, 7, 8, 9];

var sum = array
  .filter((a) => a < 5)
  .reduce((a, b) => a + b, 0)
// ----------------------^^^

console.log(sum);

没有初始值或至少一个条目,reduce无法完成其工作,没有任何返回值。当它只有一个条目且没有初始值时,它将返回第一个条目(无需调用回调)。但是甚至连一个条目都没有...

答案 1 :(得分:2)

您得到的错误应该提示解决方案。

  

未捕获的TypeError:减少空数组没有初始值

Reduce采用第二个参数,即要减小的初始值。

.reduce((a, b) => a + b, 0)

答案 2 :(得分:0)

或者只是减少:

 array.reduce((res, el) => res + el * (el < 5), 0)