Nouveau sur javascript et j'ai du mal à compter le nombre de vrais dans un tableau de valeurs booléennes. J'essaie d'utiliser la fonction de réduction (). Quelqu'un peut-il me dire ce que je fais mal?
//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
Il semble que votre problème soit déjà résolu, mais il existe de nombreuses méthodes plus simples pour le faire.
Array.prototype.filter()
- la plus simple, à mon avis.
console.log([true,false,true,false,true].filter(v => v).length);
ou encore plus simple:
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);
Vous revenez a++
lorsque la valeur est true
, qui sera toujours zéro. Le post-incrément se produit après la valeur est récupérée. Ainsi, lors de la première itération, a
est égal à 0 et la valeur de a++
est également 0, même si a
est incrémenté. Puisque a
et b
sont des paramètres du rappel, il s'agit d'un a
frais à chaque appel.
Au lieu:
myCount = [false,false,true,false,true].reduce(function(a,b){
return b?a+1:a;
},0);
Tu devrais utiliser ++a
au lieu a++
parce que vous devez changer la valeur de a
soudainement. La variable a
sera incrémentée après le retour de sa value
.
myCount = [false,false,true,false,true].reduce(function(a,b){
return b? ++a:a;
},0);
alert("myCount ="+ myCount);