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);
});

結果

""

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

回答:


226

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

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

またはES6を使用:

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

24

どちらの動作も仕様に準拠しています。

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.