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

问题描述 投票:12回答:4

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
javascript arrays ternary-operator reduce
4个回答
36
投票

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

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

8
投票

当值为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);

3
投票

你应该使用++a而不是a++,因为你必须突然改变a的值。 a变量将在返回value后递增。

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

-1
投票

我对此并不十分确定,但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
© www.soinside.com 2019 - 2024. All rights reserved.