Javascript减少一个空数组


104

当我减少数组时,我试图将数字设为零,但我不清楚地了解函数的行为

[].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);
});

结果

""

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

Answers:


227

第二个参数用于初始值。

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

或使用ES6:

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

24

两种行为均符合规范

reduce除非您明确提供一个初始“累积”值作为第二个参数,否则您不能为空数组:

如果未提供initialValue,则previousValue将等于数组中的第一个值,而currentValue将等于第二个值。如果数组不包含任何元素并且未提供initialValue,则为TypeError。

如果数组中至少有一个元素,则提供初始值是可选的。但是,如果未提供,则将数组的第一个元素用作初始值,并reduce通过调用回调继续处理数组的其余元素。在您的情况下,数组仅包含一个元素,因此该元素既成为初始值,也成为最终值,因为不再需要通过回调处理任何元素。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.