我有一个javascript函数,可以为羽毛球比赛建立循环赛。问题是在比赛中途增加或减少球员,这迫使循环赛重新计算自己并匹配已经参加比赛的球员。
我正在尝试将逻辑重写为以下内容:
我已经为此工作了好几天,但仍然无法使其正常运行。
我有4个对象:
allPlayers
playersAvailable
gamesCompleted
gamesScheduled
gamesScheduled
对象是根据其他3个对象的数据创建的,并在添加或删除新播放器时重新计算。
allplayers: [{.key: -playerKey, name: 'Name'}]
playersAvailable: [{.key:-playerKey, name: 'Name'}]
gamesCompleted: [{playerKey: {opponentKey:numberOfGames,opponentKey:numberOfGames}]
gamesCompleted
对象不包含所有播放器。
我在生成gamesScheduled
对象(javascript / es6)时遇到问题。到目前为止,这是我的方法:
将playersAvailable
按游戏最少的顺序排序
遍历playersAvailable
,如果他们还没有玩过10场比赛,则可以将gamesCompleted
列表与playersAvailable
列表进行比较,寻找尚未参加比赛的对手,如果对手没有玩10场比赛,请创建一个对战。
通过playersAvailable
循环,如果他们没有玩过10场比赛,则在gamesCompleted
列表中寻找他们玩过最少次数的对手(如果对手没有参加)玩了10场比赛,创建了一场比赛。
我可以达到#1,部分达到#2。但是,在验证游戏数量(最多10个)时,我不知道如何在gamesScheduled
中添加新添加的游戏对象。
部分代码,当用forEach()
遍历对手时
var gamesScheduled = [];
let playersAvailable = this.weekPlayers.slice().sort((a, b) => {
let aTotal = a.gs + a.gp;
let bTotal = b.gs + b.gp;
return aTotal - bTotal;
});
playersAvailable.forEach((player) => {
// if missing games
if (player.gp < 10) {
playerAvailable.forEach(opponent => {
// add opponents unplayed
if (
gamesPlayed[player[".key"]] &&
gamesPlayed[player[".key"]][opponent[".key"]] === undefined &&
opponent.gp <10
) {
gamesScheduled.push({ player1: player, player2: opponent });
}
// add opponents played
});
}
});
return gamesScheduled;