我有一个被过滤的数组,可能导致新数组为空。之后,我在其上执行了一个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);
答案 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)