数字が素数かどうかをチェックする関数を作ったのですが、そうでない場合は数値を返し、そうでない場合(素数の場合)は0を返します。JavaScriptのreduceメソッドの予期せぬ結果
var maybePrimeNumber = [5, 8, 11, 14, 17, 20, 23, 28, 31]; //numbers to test
function isNotPrime(integer){
var prime = true; //start off assuming that it is a prime nr for now
var returnNumber = 0; //to be returned at the end
for(i = 2; i<integer; i++){ //go from 2 up to the number,
if(integer % i === 0){ //if the number is divisible by any nr between 2 and itself,
prime = false; //then say that it isn't a prime number
}
}
if(!prime){ //if it isn't a prime number, then
returnNumber = integer; //prepare to send back the number
}
return returnNumber;
}
document.getElementById("demo").innerHTML = maybePrimeNumber.reduce(
(total, integer) => {return total + isNotPrime(integer)}
);
//sum all non-prime numbers up from the array and put the sum into the paragraph "demo"
、次のような問題は次のとおりです。
私はこれを実行すると、それは私に75を与えるが、私はこれで最後の行を交換するとき、それはとても私に70
を与えるべきである。
document.getElementById("demo").innerHTML = isNotPrime(maybePrimeNumber[0]);
5を非素数に誤って計算したかどうかをチェックする - それは0を返すので、誤算しません。
なぜ70の代わりに75の和を与えるのですか?
reduceコールでは、 'total'の初期値である2番目のパラメータを指定します。これは' 0'になります。そうでなければ、 '5'の配列の最初の数字になります。 5 'で答えます。参照:https://jsfiddle.net/88gx55tm/ – tymeJV