使用array.reduce计算对象数组中的出现次数



我有一组投票者:

let voters = [
{name:'Bob' , age: 30, voted: true},
{name:'Jake' , age: 32, voted: true},
{name:'Kate' , age: 25, voted: false},
{name:'Sam' , age: 20, voted: false},
{name:'Phil' , age: 21, voted: true},
{name:'Ed' , age:55, voted:true},
{name:'Tami' , age: 54, voted:true},
{name: 'Mary', age: 31, voted: false},
{name: 'Becky', age: 43, voted: false},
{name: 'Joey', age: 41, voted: true},
{name: 'Jeff', age: 30, voted: true},
{name: 'Zack', age: 19, voted: false}
];

我需要计算有多少人投票(true(。

我可以使用for循环找到它,但我正在学习reduce方法,我想在这里应用它,但似乎不知道如何应用。

// works perfectly
function totalVotes(voters){
let total = 0;
for (i=0; i < voters.length; i++){
if (voters[i].voted === true) {
total++
}
}
return total
}
function totalVotes2(voters){
voters.reduce(function (contador, item){
if (item.voted === true){
console.log(item)
console.log(contador)
//cant figure out how to make it count
}
// and how to return it
}, 0)
}

您可以将累加器的初始值设置为0,如果当前元素的voted属性为true,则添加1,否则添加0

let voters = [
{name:'Bob' , age: 30, voted: true},
{name:'Jake' , age: 32, voted: true},
{name:'Kate' , age: 25, voted: false},
{name:'Sam' , age: 20, voted: false},
{name:'Phil' , age: 21, voted: true},
{name:'Ed' , age:55, voted:true},
{name:'Tami' , age: 54, voted:true},
{name: 'Mary', age: 31, voted: false},
{name: 'Becky', age: 43, voted: false},
{name: 'Joey', age: 41, voted: true},
{name: 'Jeff', age: 30, voted: true},
{name: 'Zack', age: 19, voted: false}
];
let res = voters.reduce((acc, {voted})=>acc + (voted ? 1 : 0), 0);
console.log(res);

您还可以利用以下事实:在JavaScript中,true可以强制为1false可以强制为0,从而无需使用三元运算符。

let voters = [
{name:'Bob' , age: 30, voted: true},
{name:'Jake' , age: 32, voted: true},
{name:'Kate' , age: 25, voted: false},
{name:'Sam' , age: 20, voted: false},
{name:'Phil' , age: 21, voted: true},
{name:'Ed' , age:55, voted:true},
{name:'Tami' , age: 54, voted:true},
{name: 'Mary', age: 31, voted: false},
{name: 'Becky', age: 43, voted: false},
{name: 'Joey', age: 41, voted: true},
{name: 'Jeff', age: 30, voted: true},
{name: 'Zack', age: 19, voted: false}
];
let res = voters.reduce((acc, {voted})=>acc + voted, 0);
console.log(res);

最新更新