【问题标题】:Check if all players are ready检查是否所有玩家都准备好了
【发布时间】:2020-03-13 13:11:51
【问题描述】:

我需要帮助来循环播放玩家的对象并检查是否所有玩家都准备好了。

我有一个名为players 的javascript 对象,其中包含一些属性的播放器对象。其中之一是ready。我的目标是在所有玩家ready 属性为真时登录控制台“所有玩家现在都准备好了”。

players = {
  vGlAIs9Nn8viAFQ4AAAA: {
    playerId: 'vGlAIs9Nn8viAFQ4AAAA',
    alive: true,
    ready: true
  },
  c1Acl3kLSUuge0p4AAAB: {
    playerId: 'c1Acl3kLSUuge0p4AAAB',
    alive: true,
    ready: false
  },
  '5nyDlUPtWrYg31EEAAAC': {
    playerId: '5nyDlUPtWrYg31EEAAAC',
    alive: true,
    ready: false
  }
}

【问题讨论】:

标签: javascript object for-loop


【解决方案1】:

你可以使用 Array.every

const players = {
  vGlAIs9Nn8viAFQ4AAAA: {
    playerId: 'vGlAIs9Nn8viAFQ4AAAA',
    alive: true,
    ready: true
  },
  c1Acl3kLSUuge0p4AAAB: {
    playerId: 'c1Acl3kLSUuge0p4AAAB',
    alive: true,
    ready: false
  },
  '5nyDlUPtWrYg31EEAAAC': {
    playerId: '5nyDlUPtWrYg31EEAAAC',
    alive: true,
    ready: false
  }
};

const values = Object.values(players);

const isReady = values.every(item => !!item.ready);

console.log(isReady);

【讨论】:

  • @charbelk 我不明白“未准备好”你能解释一下吗?
【解决方案2】:

这是在满足条件时返回布尔值的函数;

function isEveryoneReady (obj) {
  return Object.values(obj).every(player => player.ready)
}

查看下面代码 sn-p 中的示例:

function isEveryoneReady (obj) {
  return Object.values(obj).every( player => {
    return player.ready
  })
}

notReadyPlayers = {
  vGlAIs9Nn8viAFQ4AAAA: {
    playerId: 'vGlAIs9Nn8viAFQ4AAAA',
    alive: true,
    ready: true
  },
  c1Acl3kLSUuge0p4AAAB: {
    playerId: 'c1Acl3kLSUuge0p4AAAB',
    alive: true,
    ready: false
  },
  '5nyDlUPtWrYg31EEAAAC': {
    playerId: '5nyDlUPtWrYg31EEAAAC',
    alive: true,
    ready: false
  }
}

readyPlayers = {
  vGlAIs9Nn8viAFQ4AAAA: {
    playerId: 'vGlAIs9Nn8viAFQ4AAAA',
    alive: true,
    ready: true
  },
  c1Acl3kLSUuge0p4AAAB: {
    playerId: 'c1Acl3kLSUuge0p4AAAB',
    alive: true,
    ready: true
  },
  '5nyDlUPtWrYg31EEAAAC': {
    playerId: '5nyDlUPtWrYg31EEAAAC',
    alive: true,
    ready: true
  }
}


console.log(isEveryoneReady(notReadyPlayers))
console.log(isEveryoneReady(readyPlayers))

【讨论】:

    【解决方案3】:

    const players = {
      vGlAIs9Nn8viAFQ4AAAA: {
        playerId: 'vGlAIs9Nn8viAFQ4AAAA',
        alive: true,
        ready: true
      },
      c1Acl3kLSUuge0p4AAAB: {
        playerId: 'c1Acl3kLSUuge0p4AAAB',
        alive: true,
        ready: false
      },
      '5nyDlUPtWrYg31EEAAAC': {
        playerId: '5nyDlUPtWrYg31EEAAAC',
        alive: true,
        ready: false
      }
    }
    
    if (Object.values(players).every(item => item.ready)) {
      console.log('All players are ready.')
    } else {
      console.log('Some or all players are not yet ready');
    }

    【讨论】:

      【解决方案4】:
      let all_ready = true;
      for (const player of players) {
        if (!player.ready) {
          all_ready = false;
          break;
        }
      }
      if (all_ready) {
        console.log("All players are now ready!");
      }
      

      【讨论】:

        猜你喜欢
        • 2018-09-19
        • 1970-01-01
        • 2018-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        相关资源
        最近更新 更多