Javascript Reduce 一个空数组

2022-08-30 04:14:24

当我减少数组时,我试图得到数字零,但我不清楚函数的行为。

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

结果

TypeError: Reduce of empty array with no initial value

似乎如果数组是空的,我无法减少它

[""].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

结果

""

如果数组中唯一的元素是空字符串, 则检索空字符串


答案 1

第二个参数用于初始值。

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
}, 0);

或使用 ES6:

[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);

答案 2

这两种行为都符合规范

除非显式提供初始“累积”值作为第二个参数,否则不能使用空数组:reduce

如果未提供初始值,则先前值将等于数组中的第一个值,而 current 值将等于第二个值。如果数组不包含任何元素并且未提供初始值,则它是一个 TypeError。

如果数组至少有一个元素,则提供初始值是可选的。但是,如果未提供,则数组的第一个元素将用作初始值,并通过调用回调继续处理其余数组元素。在您的例子中,数组只包含一个元素,因此该元素成为初始值和最终值,因为没有更多的元素要通过回调进行处理。reduce