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

git*_*ole 18 javascript arrays reduce ternary-operator

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
Run Code Online (Sandbox Code Playgroud)

kin*_*ser 42

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

Array.prototype.filter() - 在我看来,这是最简单的一个.

console.log([true,false,true,false,true].filter(v => v).length);
Run Code Online (Sandbox Code Playgroud)

甚至更简单:

console.log([true,false,true,false,true].filter(Boolean).length);
Run Code Online (Sandbox Code Playgroud)

Array.prototype.forEach()

var myCounter = 0;

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

console.log(myCounter);
Run Code Online (Sandbox Code Playgroud)


Poi*_*nty 8

您将返回a++true,该值始终为零.检索到值发生增量.所以在第一次循环,a是0,和值a++也是 0,即使a递增.因为a并且b是回调的参数,所以a每次通话都是新鲜的.

代替:

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


小智 8

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

  1. 带过滤器的布尔值()

     const arrayCount = [false,false,true,false,true].filter(Boolean).length;
     console.log(arrayCount);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 筛选

     const arrayCount = [false,false,true,false,true].filter(item => item).length;
     console.log(arrayCount);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 减少()

    const arrayCount = [false,false,true,false,true].reduce((acc, current) => acc + current, 0);
    console.log(arrayCount);
    
    Run Code Online (Sandbox Code Playgroud)
  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]))
    
    Run Code Online (Sandbox Code Playgroud)
  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]))
    
    Run Code Online (Sandbox Code Playgroud)


Mih*_*nut 5

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

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