Javascriptが初めてで、ブール値の配列の真の数を数えるのに問題があります。 reduce()関数を使用しようとしています。誰かが私が間違っていることを教えてもらえますか?
//trying to count the number of true in an array
myCount = [false,false,true,false,true].reduce(function(a,b){
return b?a++:a;
},0);
alert("myCount ="+ myCount); // this is always 0
あなたの問題はすでに解決されているようですが、それを行う簡単な方法がたくさんあります。
Array.prototype.filter()
-私の意見では、最も簡単なものです。
console.log([true,false,true,false,true].filter(v => v).length);
またはさらに単純な:
console.log([true,false,true,false,true].filter(Boolean).length);
Array.prototype.forEach()
var myCounter = 0;
[true,false,true,false,true].forEach(v => v ? myCounter++ : v);
console.log(myCounter);
値がtrue
の場合、a++
を返します。これは常にゼロになります。ポストインクリメントが発生しますafter値が取得されます。そのため、最初の反復では、a
は0であり、a++
の値はalso0です。ただし、a
はインクリメントされます。 a
とb
はコールバックのパラメーターであるため、呼び出しごとに新しいa
になります。
代わりに:
myCount = [false,false,true,false,true].reduce(function(a,b){
return b?a+1:a;
},0);
a
の値を突然変更する必要があるため、++a
の代わりにa++
を使用する必要があります。 a
変数は、value
が返された後にインクリメントされます。
myCount = [false,false,true,false,true].reduce(function(a,b){
return b? ++a:a;
},0);
alert("myCount ="+ myCount);