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

Get a value from an object using a variable as a key

我有一个像这样的对象;

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

我想通过它的键来解构一个对象作为 currentPlayer。 (玩家编号作为道具传递)。

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

这没有用,我也不想使用 id 属性。

你能不能只使用 Object.values() 来实现这个?

Object.values() 将 return 您的 players 对象({id:1, name:'', ....} 等)的值作为数组。然后,您可以使用 .filter() 方法通过 playerNumber select 播放器值。

例如,像这样:

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

你会发现that this works in most browsers

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

const currentPlayer = players[playerNumber];

Object.keys() 会给你一个键数组,而不是存储在这些键下的对象(即 Object.keys(players) returns ['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.

获得特定球员的最简单方法是使用括号表示法:

const currentPlayer = players[playerNumber];

这假定 playerNumberplayers 对象中的有效键。