构建随机团队生成器的最佳方法

时间:2021-01-29 16:44:08

标签: javascript arrays

我目前正在学习前端开发,在寻求发展技能的过程中,我挑战了自己构建一个随机团队生成器。

一些背景故事;我和我的一些朋友定期在我们组(我们 12 个人)内举办 COD Warzone 锦标赛,我们为每支球队随机选择球员。但是,我想根据 KD 比率(击杀/死亡)自动执行此操作,将最高 KD 分配到 4 个团队中的 1 个。然后我计划对中、下 KD 进行相同的工作。这样一来,所有团队的 KD 比率就会相等。

现在,对于对 JS 还很陌生的人来说,这感觉相当雄心勃勃,我知道我需要一个嵌套数组或对象来容纳名称/KD 数据,然后构建一个函数来遍历每个数组,但是对于我无法弄清楚我的生活。

存储玩家数据的最佳方式是什么?

嵌套数组,例如:

var team = [ [Name, KD], [Name, KD], [Name, KD], [Name, KD]];

还是对象?

var users = { Name:KD, Name:KD, Name:KD,Name:KD,};

然后构建一个函数来运行每个嵌套数组并根据它们的 KD 将它们分配给一个随机的团队变量?

2 个答案:

答案 0 :(得分:0)

我会将这些数据存储在玩家对象数组中,例如:

const players = [
    { name: 'Bob', kd: 4 },
    { name: 'Sam', kd: 8 },
    { name: 'Danny', kd: 2 },
    { name: 'Chris', kd: 3 },
];

然后你可以像这样使用 sort() 按 kd 对数组进行排序:

players.sort((a, b) => b.kb - a.kb);

然后您可以在 for 循环中一次将一个玩家推入团队对象中:

const teams = { team0: [], team1: [], team2: [], team3: [] };
for (let i = 0; i < players.length; i++) {
    teams['team' + (i % 4)].push(players[i]);
}

答案 1 :(得分:0)

您最初的概念非常简单,“将顶尖的 K/D 球员分配到其他团队中”。为此,您可以按 K/D 对您的球员数组进行排序,让前四名球队领先,然后将下一个顶级球员添加到最低球队。

示例:

const players = [
  { Name: 'B', KD: 9 },
  { Name: 'H', KD: 3 },
  { Name: 'E', KD: 6 },
  { Name: 'D', KD: 7 },
  { Name: 'A', KD: 10 },
  { Name: 'C', KD: 8 },
  { Name: 'J', KD: 1 },
  { Name: 'F', KD: 5 },
  { Name: 'I', KD: 2 },
  { Name: 'G', KD: 4 },
]
const sorted = players.sort((a, b) => a.KD - b.KD)
const teamA = [sorted.pop()] // #1 player
const teamB = [sorted.pop()] // #2 player
const teamC = [sorted.pop()] // #3 player
const teamD = [sorted.pop()] // #4 player
const pushIfDefined = (arr, val) => val && arr.push(val)

while(sorted.length) {
  pushIfDefined(teamD, sorted.pop())
  pushIfDefined(teamC, sorted.pop())
  pushIfDefined(teamB, sorted.pop())
  pushIfDefined(teamA, sorted.pop())
}
console.log("Team A: ", teamA)
console.log("Team B: ", teamB)
console.log("Team C: ", teamC)
console.log("Team D: ", teamD)