web-dev-qa-db-fra.com

Compter le nombre de vrais membres dans un tableau de valeurs booléennes

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
15
gitmole

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);
39
kind user

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);
8
Pointy

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); 
3
Mihai Alexandru-Ionut