我试图获取其中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 = 1acc = 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/

10-09 23:10