使用变量作为键从对象获取值

时间:2018-08-30 04:01:52

标签: javascript-objects destructuring

我有一个类似的对象

  players: {
    '1': {id:1, name:'', ....},
    '2': {id:2, name:'', ....},
     ... 
   }

我想通过其键作为currentPlayer来分离对象。 (玩家编号作为道具传递)。

const currentPlayer = Object.keys(players).filter(
      obj => obj.id === playerNumber
    );

这不起作用,我也不想使用id属性。

3 个答案:

答案 0 :(得分:2)

获得特定玩家的最简单方法是使用括号符号:

const currentPlayer = players[playerNumber];

这假定playerNumberplayers对象中的有效密钥。

答案 1 :(得分:1)

您是否可以仅使用Object.values()来实现这一目标?

Object.values()将以数组形式返回players对象({id:1, name:'', ....}等)的值。然后,您可以使用.filter()方法通过playerNumber选择玩家值。

例如,像这样的东西:

const currentPlayer = Object.values(players).filter(
  obj => obj.id === playerNumber
);

您会发现that this works in most browsers

或者,如果您组织了players对象,以便键是玩家ID,则可以通过以下方式访问玩家:

const currentPlayer = players[playerNumber];

答案 2 :(得分:0)

Object.keys()将为您提供一系列键,而不是存储在这些键下的对象(即Object.keys(players)返回['1', '2', ...])。

如果要获取对象,可以像这样映射结果数组:

// Use map to turn the array of keys into the array of objects
const currentPlayer = Object.keys(players).map(id => players[id])
  // be careful: filter returns an array, but you probably just want the one object
  .filter(obj => obj.id === playerNumber)[0]

根据您要定位的目标,您可能还可以访问执行相同功能的Object.values()(即,您仅用Object.values(players)替换第一行),请注意浏览器支持是little more limited