这是使用JS.map的正确方法吗?

时间:2017-05-20 12:36:52

标签: javascript arrays

我试图计算数组中所有对象的计数(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)
  })

看起来像罪一样丑陋但似乎有效。有没有更强大的方法来做到这一点?

4 个答案:

答案 0 :(得分:1)

Array.reduce是一个不错的选择,因为当你实际只想要alive玩家的数量而不是玩家本身时,它可以避免计算过滤后的数组。

您的问题在reduce回调中:acc累积numberalive玩家,因此您不应将其与true进行比较

此外,您可能只想写acc = 1,而不是通过acc = 0acc += 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);