web-dev-qa-db-ja.com

Javascriptは空の配列を削減します

配列を減らすとき、数字のゼロを取得しようとしていますが、関数の動作を明確に理解していません

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

結果

""

配列内の唯一の要素が空の文字列である場合、空の文字列を取得します

87
agusgambina

2番目のパラメーターは初期値用です。

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

またはES6を使用:

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

両方の動作は 仕様 に基づいています。

2番目の引数として初期の「累積」値を明示的に指定しない限り、空の配列をreduceすることはできません。

InitialValueが指定されていない場合、previousValueは配列の最初の値と等しくなり、currentValueは2番目の値と等しくなります。配列に要素が含まれておらず、initialValueが提供されていない場合、TypeErrorです。

配列に少なくとも1つの要素がある場合、初期値の提供はオプションです。ただし、1つが指定されていない場合、配列の最初の要素が初期値として使用され、reduceはコールバックを呼び出して残りの配列要素の処理を続けます。あなたの場合、配列には単一の要素しか含まれていないので、コールバックを介して処理される要素はもうないため、その要素は初期値と最終値になります。

21
Jon