0

我想知道执行此常见操作的更好方法是什么:

var id = 1;
var Players = [{ id: 0, other: '...'}, { id: 1, other: '...' }]

for (var i=0; i<Players.length; i++) {
  if (Players[i].id == id) {
    return i;
  } 
}

我在考虑 Array.map 但我不知道我们是否可以访问密钥:

Players.map(function(Player) { if (Player.id == id) { return ?? } });
4

3 回答 3

1

取决于您的结构(并牢记性能);使其成为关联对象/数组可以解决。

var object = { id: 1, other: '...' };

var Players = [];
Players[object.id] = object;

然后,您可以通过执行以下操作按 ID 引用所需的 Player:

var id = 1;
var playerObject = Players[id];

请注意,在这种情况下,您不能对 ID 使用负值或零值。

于 2013-07-03T13:52:47.010 回答
1

您也可以尝试减少

// The second argument is set to null so that reduce doesn't just
// start with the first object in the array
Players.reduce(function(memo, Player, key) {
    return Player.id === id ? key : memo;
}, null);
于 2013-07-03T13:56:02.723 回答
0

Array.map()将索引作为第二个参数传递给回调。
但是,它不会帮助您找到单个项目。

Javascript 数组没有执行此操作的函数。

使用LoDash,您可以很容易地做到这一点:

_.findIndex(Players, { id: 4 })
于 2013-07-03T13:50:05.790 回答