Javascript 单个淘汰赛的算法,其中被淘汰的球队还争夺剩余位置

Javascript 单个淘汰赛的算法,其中被淘汰的球队还争夺剩余位置,javascript,algorithm,Javascript,Algorithm,我正在构建一个网球比赛的应用程序,我想生成比赛,以便进行一次类似这样的淘汰赛,被淘汰的球队将不得不为剩余的位置进行竞争 为了澄清,本次比赛以N支球队开始,在上面的例子中,我们有8支球队首先参加a组和B组的比赛,将进行总共12场比赛(循环赛),然后在下一阶段,a组的获胜者与B组的最后一支球队比赛,依此类推,直到我们有第13场到第16场的括号。然后胜利者在主队比赛,失败者在第二队争夺剩余位置。比赛分阶段进行的方式是这样的:在下一阶段,第一场比赛由输球的球队进行,在所有输球的球队方括号都打完之后,将

我正在构建一个网球比赛的应用程序,我想生成比赛,以便进行一次类似这样的淘汰赛,被淘汰的球队将不得不为剩余的位置进行竞争

为了澄清,本次比赛以N支球队开始,在上面的例子中,我们有8支球队首先参加a组和B组的比赛,将进行总共12场比赛(循环赛),然后在下一阶段,a组的获胜者与B组的最后一支球队比赛,依此类推,直到我们有第13场到第16场的括号。然后胜利者在主队比赛,失败者在第二队争夺剩余位置。比赛分阶段进行的方式是这样的:在下一阶段,第一场比赛由输球的球队进行,在所有输球的球队方括号都打完之后,将按上述方式进行赢球的球队方括号,第17场和第18场比赛是“第二方”输球的球队比赛,第19场和第20场比赛是“主要方”赢家比赛

我用javascript开发了一个简单的算法,我试图在其中实现一个匹配阶段数组,它将告诉我将按顺序进行多少次“第二方”匹配,然后是多少次“主要方”匹配:

    const generateMatchesBrakets = (mainSideMatches) => {

     let matchesPlayed = [];
     let stage = 0;

    while ( parseInt(mainSideMatches) ) {
        let secondSideMatches = parseInt(secondSideMatches / 2);
        if ( matchesPlayed[stage] === undefined ) matchesPlayed[stage] = [];

        matchesPlayed[stage]['main'] = [];
        for(let i = 0; i < mainSideMatches; i++) matchesPlayed[stage]['main'].push(1);

        if (secondSideMatches) {
            let nextRound = stage + 1;

            if ( matchesPlayed[nextRound] === undefined ) matchesPlayed[nextRound] = [];
            matchesPlayed[nextRound]['second'] = [];
            for (let i = 0; i < secondSideMatches; i++) matchesPlayed[nextRound]['second'].push(1); 
        }

        mainSideMatches /= 2;
        stage++;
    }

    return matchesPlayed;

}

let teams = 8;
let n = teams / 2;

if (n % 2 !== 0) n++;

let mainTournamentBrackets = generateMatchesBrakets(n);
let secondTournamentdBrackets = [];

mainTournamentBrackets.forEach( bracket => {
    if ( bracket['second'] ) {
        let n = bracket['second'].length;
        secondTournamentdBrackets.push( generateMatchesBrakets(n) ); 
    }
})
所以我正在生成第二个匹配的下一个分支,计划是用主分支连接它。如果每个括号中有两个以上的比赛失败,问题就会出现

任何帮助和建议都将不胜感激

提前谢谢你

(3) [Array(0), Array(0), Array(0)]
       0: [main: Array(4)]
       1: [second: Array(2), main: Array(2)]
       2: [second: Array(3 /*+ 2 from second matches*/) , main: Array(1)]
   length: 3