JavaScript - 为淘汰赛创建数组

标签 javascript arrays

我希望能够为淘汰赛生成空白比赛。这是我的意思的一个例子。

假设我们有一场淘汰赛,有 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 的数组,但我不知道如何在每轮中生成必要数量的比赛。

最佳答案

这应该为给定数量的团队生成一个空的匹配数组:

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 的幂的团队计数。它确实会生成轮空的空位(当团队数量为奇数时)。

关于JavaScript - 为淘汰赛创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15392681/

相关文章:

javascript - 存储 udates mobx 时组件不会重新呈现

c - C 中用户定义的数组元素和数组大小

java - 数组实例化调用构造函数?

arrays - 在数组上执行 findOne() 时,Meteor 和 Mongo DB 会提供不同的结果

arrays - 如何在 PostgreSQL 函数中声明一个行类型数组?

java - 调用数组列表方法

javascript - 您是否应该在 Ajax 调用中更新数据库?

javascript - 抓取网站。在抓取期间无法自动执行用户点击

javascript - Openlayers 标记在多个标记上单击事件

Javascript fetch api 有效负载未传递