javascript - 将 192 场比赛的赛程分成 6 场比赛的周,不重复球队

标签 javascript arrays

我已经编写了一份联赛赛程表,以便 12 支球队总共进行 192 场比赛(与联盟对手各 4 次,与跨联盟对手各 2 次)。我也对这些游戏进行了洗牌。

我的最后一步是将这 192 场比赛分为 16 周,每场 6 场比赛。但是,重要的是每支球队在任何给定的一周内只出现一次(即每周只打一场比赛)。这是我坚持的部分。

我的日程安排数组看起来像这样:

let schedule = ["a : b", "c : d", "e : f", "g : h", "i : j", "k : l", "m : n", "o : p", "q : r", "s : t", "u : v", "x : y", "a : c", "d : f", "g : i", "l : o"]; // remember, this is actually 192 elements long

从这个数组(记住它有 192 个元素,所以它比上面的大,这是显示数据结构的示例)我想生成 week1,这是一个包含 6 个元素的数组schedule 数组中的元素,如下所示:

let week1 = ["a : b", "c : d", "e : f", "g : h", "i : j", "k : l"];

以上就是我想要的结果。但是,我不能只使用 schedule.slice(0, 6) 来获取 6 个元素,因为我最终可能会让团队玩两次,如下所示:

let week1 = ["a : b", "c : d", "a : e", "f : g", "h : i", "j : k"]; // Notice "a" is playing twice here, which I do not want.

所以,问题是,如何从 192 场比赛的数组中取出 6 场比赛,但确保每支球队在这 6 场比赛的数组中只出现一次?

最佳答案

const games = ["a : b", "c : d", "e : f", "g : h", "i : j", "k : l", "m : n", "o : p", "q : r", "s : t", "u : v", "x : y", "a : c", "d : f", "g : i", "l : o"];

const teamsTaken = new Set();
const result = [];

for(const game of games) {
  if(result.length >= 6) break;
  
  const [teamA, teamB] = game.split(" : ");
  if(teamsTaken.has(teamA) || teamsTaken.has(teamB)) continue;
  
  teamsTaken.add(teamA);
  teamsTaken.add(teamB);
  
  result.push(game);
 }
 
 console.log(result);

使用哈希表排除重复项。

关于javascript - 将 192 场比赛的赛程分成 6 场比赛的周,不重复球队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57974024/

相关文章:

javascript - 无法根据 react 列表创建路由

javascript - 在模板 Web 组件中实现框架

javascript - 如何从异步调用返回响应?

javascript - Chrome 64 更新 - 静音标签不再适用于 <video>

sql - Postgres |如何从包含多个 JSON 对象的 JSON 数组中提取值

javascript - 为什么数组没有显示在文本区域中?

java - 如何在多个数组中搜索输入值并使用一个或多个 for-each 循环返回值和位置

ios - 在数组中使用范围栏( Split View)过滤搜索

javascript - 其外部的替代函数变量

javascript - ng-repeat 与 AngularJs 中嵌套的 json 对象数组