这是遍历数组中数组的最佳方法

时间:2017-05-18 17:25:39

标签: javascript arrays ecmascript-6

我一直在做这样的搜索一段时间,我觉得这可能有更好的方法。情况是我有一个双重消除锦标赛支架,必须找到其中一个游戏。获胜者和输家括号存储在一个数组中,然后游戏存储在每个数组中。

结构看起来像这样

{
   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    
 }
}

2 个答案:

答案 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    
  }
}