我一直在做这样的搜索一段时间,我觉得这可能有更好的方法。情况是我有一个双重消除锦标赛支架,必须找到其中一个游戏。获胜者和输家括号存储在一个数组中,然后游戏存储在每个数组中。
结构看起来像这样
{
tournament: {
brackets: [
{games: [{id:'x'},{id:'y'},...,{id:'z'}]},
{games: [{id:'x'},{id:'y'},...,{id:'z'}]}
]
]
}
}
这是我用来查找ID的代码。
for (var i = 0; i < tournament.brackets.length; i++) {
for (var y = 0; y < tournament.brackets[i].games;length; y++) {
// Does the ID of this object match known ID
}
}
答案 0 :(得分:1)
一个简单的替代方法(如果您经常搜索)将基于游戏ID构建反向查找数组。类似的东西:
var lookup = {};
for (var i = 0; i < tournament.brackets.length; i++) {
for (var y = 0; y < tournament.brackets[i].games.length; y++) {
lookup[tournament.brackets[i].games[y].id] = { bracket: i, game: y };
}
}
然后:
function findGame( id, lookup, tournament ) {
if ( !lookup.hasOwnProperty( id ) )
return false;
var location = lookup[id];
return tournament.brackets[location.bracket].games[location.game];
}
答案 1 :(得分:1)
由于您标记了问题ES6,确实有更好的方法:
for (var bracket of tournament.brackets) {
for (var game of bracket.games) {
// Does the ID of this object match known ID
}
}