我试图获取其中object.alive == true的数组(this.players
)中所有对象的计数。
到目前为止,我有:
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)
})
看起来很丑陋,但似乎起作用。有没有更强大的方法可以做到这一点?
最佳答案
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);
关于javascript - 这是使用JS.map的正确方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44085956/