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
答案 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()
强>
var myCounter = 0;
[true,false,true,false,true].forEach(v => v ? myCounter++ : v);
console.log(myCounter);
&#13;
答案 1 :(得分:7)
当值为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);
答案 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)
我对此并不确定,但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
答案 4 :(得分:0)
嗯,有多种方法可以做到。
使用 reduce() 的布尔值
const arrayCount = [false,false,true,false,true].filter(Boolean).length;
console.log(arrayCount);
过滤器
const arrayCount = [false,false,true,false,true].filter(item => item).length;
console.log(arrayCount);
reduce()
const arrayCount = [false,false,true,false,true].reduce((acc, current) => acc + current, 0);
console.log(arrayCount);
使用函数
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]))
使用 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]))