私は入力として配列をとる関数を記述しようとしています。正の整数の場合は、それを数えます。整数が負の場合は、それを合計します。reduce()の最初の引数がundefinedを返すのはなぜですか?
私は、jsのreduce()
ヘルパーがこれを実行する最良の方法だと考えましたが、実行時に最初の引数のために未定義に戻し続けます。ここで
は私のコードです:
function countPositivesSumNegatives(input) {
let countPositive = 0;
let sumNegative = 0
if (input === null || input === []){
return [];
} else {
return input.reduce(function(prev,num){
if (num > 0) {
countPositive++;
}else{
sumNegative = prev + num};
}, 0);
}
return [countPositive, sumNegative];
}
それは私に言うTypeError例外スロー:
TypeError例外を:プロパティを読み取ることができません '0' 未定義
の私は、コンソールに '前へ' にログインすると、 reduce関数の中で、最初のものを除くすべての入力に対してundefinedを記録します。最初のものは期待どおり0です。しかし、それ以降の各入力については未定義で記録されます。なぜこうなった?
ありがとうございます。
ああ、それは理にかなっています。私はreduce()について教えている人がいつもコールバックの一部であることを強調しています。 – newman
また、空の配列の条件付きテストは無効です – charlietfl
@newman - '.forEach()'を使って実装を追加しました。これは '.reduce()'をここに合わせようとするより簡単です。 – jfriend00