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)
您将返回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
嗯,有多种方法可以做到这一点。
带过滤器的布尔值()
const arrayCount = [false,false,true,false,true].filter(Boolean).length;
console.log(arrayCount);
Run Code Online (Sandbox Code Playgroud)
筛选
const arrayCount = [false,false,true,false,true].filter(item => item).length;
console.log(arrayCount);
Run Code Online (Sandbox Code Playgroud)
减少()
const arrayCount = [false,false,true,false,true].reduce((acc, current) => acc + current, 0);
console.log(arrayCount);
Run Code Online (Sandbox Code Playgroud)
使用功能
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)
使用 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)
您应该使用++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)
| 归档时间: |
|
| 查看次数: |
12361 次 |
| 最近记录: |