数组减少:如何处理来自前一个过滤器的空数组?

Jak*_*her 0 javascript

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

未捕获的类型错误:减少没有初始值的空数组

如果过滤器返回一个空数组,我如何在减少之前中断?

代码

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

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

console.log(sum);
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 9

提供初始值作为 的第二个参数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);
Run Code Online (Sandbox Code Playgroud)

如果没有初始值或至少一个条目,则reduce无法完成其工作,它没有任何可返回的内容。当它只有一个条目且没有初始值时,它返回第一个条目(不调用回调)。但连一个条目都没有……


Mad*_*iha 5

你得到的错误应该暗示解决方案。

未捕获的类型错误:减少没有初始值的空数组

Reduce 需要第二个参数,即要减少到的初始值。

.reduce((a, b) => a + b, 0)
Run Code Online (Sandbox Code Playgroud)