我试图计算数组中所有对象的计数(this.players
),其中object.alive == true。
到目前为止,我有:
return this.players.map(el => el.alive).reduce(function(acc, cur) {
if(acc === true) {
if(cur === true) {
acc = 1
} else {
acc = 0
}
}
return acc + ((cur) ? 1 : 0)
})
看起来像罪一样丑陋但似乎有效。有没有更强大的方法来做到这一点?
答案 0 :(得分:1)
Array.reduce
是一个不错的选择,因为当你实际只想要alive
玩家的数量而不是玩家本身时,它可以避免计算过滤后的数组。
您的问题在reduce
回调中:acc
累积number
个alive
玩家,因此您不应将其与true
进行比较
此外,您可能只想写acc = 1
,而不是通过acc = 0
或acc += 1
重置该号码。
此外,不是将玩家映射到他们的alive
属性,而是直接在reduce回调中访问该属性:
let players = [{alive: true}, {alive: false}, {alive: false}, {alive: true}];
let alive = players.reduce((alive, next) => next.alive ? alive + 1 : alive, 0);
console.log(alive);

答案 1 :(得分:0)
尝试过滤器,它就像map返回过滤对象数组一样。
return this.players.filter(player => player.alive);
答案 2 :(得分:0)
使用Array.prototype.filter()创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。
return this.players.filter(player => player.alive).length;
答案 3 :(得分:0)
我认为filter
对你的案件有好处
let players = [{alive: true}, {alive: false}, {alive: false}, {alive: true}]
let alivePlayersNum = players.filter( player => player.alive).length;
console.log(alivePlayersNum);