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
好像你的问题已经解决了,但有很多简单的方法可以做到。
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);
当值为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);
你应该使用++a
而不是a++
,因为你必须突然改变a
的值。 a
变量将在返回value
后递增。
myCount = [false,false,true,false,true].reduce(function(a,b){
return b? ++a:a;
},0);
alert("myCount ="+ myCount);
我对此并不十分确定,但a
和b
不是数字。
你应该做的事情如下:
//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