计算布尔值数组中的真实成员数

时间:2017-02-18 15:34:38

标签: javascript arrays ternary-operator reduce

javascript新手,我无法计算布尔值数组中的trues数。我试图使用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

5 个答案:

答案 0 :(得分:31)

好像你的问题已经解决了,但有很多简单的方法可以解决它。

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()

&#13;
&#13;
var myCounter = 0;

[true,false,true,false,true].forEach(v => v ? myCounter++ : v);

console.log(myCounter);
&#13;
&#13;
&#13;

答案 1 :(得分:7)

当值为a++时,您将返回true,该值始终为零。在检索到值之后,发生后增量。因此,在第一次迭代中,a为0,a++的值 0,即使a递增。由于ab是回调的参数,因此每次调用都是a

相反:

myCount = [false,false,true,false,true].reduce(function(a,b){
  return b?a+1:a;
},0);

答案 2 :(得分:3)

您应该使用++a代替a++,因为您必须突然更改a的值。 a变量将在返回value后递增。

 myCount = [false,false,true,false,true].reduce(function(a,b){
      return b? ++a:a;
    },0);
alert("myCount ="+ myCount); 

答案 3 :(得分:0)

我对此并不确定,但ab不是数字。

你应该这样做:

//trying to count the number of true in an array
myCount = [false,false,true,false,true].reduce(function(a,b){
cpt = 0;
if(a) cpt++;
if(b) cpt++;
return cpt;
},0);
alert("myCount ="+ myCount);  // this is always 0

答案 4 :(得分:0)

嗯,有多种方法可以做到。

  1. 使用 reduce() 的布尔值

     const arrayCount = [false,false,true,false,true].filter(Boolean).length;
     console.log(arrayCount);
    
  2. 过滤器

     const arrayCount = [false,false,true,false,true].filter(item => item).length;
     console.log(arrayCount);
    
  3. reduce()

    const arrayCount = [false,false,true,false,true].reduce((acc, current) => acc + current, 0);
    console.log(arrayCount);
    
  4. 使用函数

    function arrayCount(arr) {
     let result = [];
     for(let i = 0; i < arr.length; i++) {
         if (arr[i] === true) {
             result.push(arr[i]);
         }
     }
     return result.length;
    }
    
    console.log(arrayCount([false,false,true,false,true]))
    
  5. 使用 for..of

      function arrayCount(arr) {
          let count = 0;
          for(let element of arr) if(element===true) count++;
          return count;
     }
    
    console.log(arrayCount([false,false,true,false,true]))