配列を減らすとき、数字のゼロを取得しようとしていますが、関数の動作を明確に理解していません
[].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);
});
結果
""
配列内の唯一の要素が空の文字列である場合、空の文字列を取得します
2番目のパラメーターは初期値用です。
[].reduce(function(previousValue, currentValue){
return Number(previousValue) + Number(currentValue);
}, 0);
またはES6を使用:
[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);
両方の動作は 仕様 に基づいています。
2番目の引数として初期の「累積」値を明示的に指定しない限り、空の配列をreduce
することはできません。
InitialValueが指定されていない場合、previousValueは配列の最初の値と等しくなり、currentValueは2番目の値と等しくなります。配列に要素が含まれておらず、initialValueが提供されていない場合、TypeErrorです。
配列に少なくとも1つの要素がある場合、初期値の提供はオプションです。ただし、1つが指定されていない場合、配列の最初の要素が初期値として使用され、reduce
はコールバックを呼び出して残りの配列要素の処理を続けます。あなたの場合、配列には単一の要素しか含まれていないので、コールバックを介して処理される要素はもうないため、その要素は初期値と最終値になります。