2013-03-13 27 views
0

我希望能夠爲淘汰賽錦標賽生成空白比賽。這是我的意思的一個例子。JavaScript - 爲淘汰賽錦標賽創建陣列

假設我們有8支球隊的淘汰賽: 我使用Math.log(teamList.length)/Math.log(2)來計算比賽有3輪比賽。

這裏是爲制定一個一般的規則有多少比賽是在每一輪:

numberOfRounds = n [ [2^n-1 matches], ...., [2^0 matches] ] 

所以我從這個,對於一個8小組賽知道將有3個回合,而賽會這個樣子:

[ [4 matches], [2 matches], [1 match] ] 

我應該指出,每一個匹配被存儲爲一個陣列,因此,例如在8隊比賽的半最終可能看起來像以下:

[ [team1,team2], [team3,team4] ] 

我想生成一些代碼,這意味着我可以採取一個團隊的名單,並生成比賽的空白匹配集。

所以,如果我通過8支球隊的名單到比賽,將產生以下匹配數組:

[ 
    [ [], [], [], [] ], 
    [ [], [] ], 
    [ [] ] 
] 

有誰有關於如何做到這一點任何想法?到目前爲止,我只具備以下條件:

for(var i = 0; i < numRounds; i++) { 
     matches.push([]); 
} 

這會產生每一輪的比賽,所以8支球隊會生成一個長度爲3的數組,但我不知道如何生成內部匹配的必要量每一輪。

回答

1

這將產生一個空的匹配陣列對於給定數目的球隊:

function genMatches (nTeams) { 
    var matchArray = []; 
    while (nTeams > 1) { 
     nTeams = (nTeams + 1) >> 1; 
     var matches = []; 
     for (var i = 0; i < nTeams; ++i) { 
      matches.push([]); 
     } 
     matchArray.push(matches); 
    } 
    return matchArray; 
} 

應該與不是2的冪隊計數正確對待它確實產生輪空兩輪插槽(當有是奇數隊)。

+0

非常感謝,這個問題很容易想到在你的腦海裏,但是把它放到一個函數裏讓我感到困惑不已......感謝你的幫助。 – germainelol 2013-03-13 18:03:17