使用来自其他3个对象的数据创建对象时出现问题

时间:2018-11-29 19:08:41

标签: javascript ecmascript-6

我有一个javascript函数,可以为羽毛球比赛建立循环赛。问题是在比赛中途增加或减少球员,这迫使循环赛重新计算自己并匹配已经参加比赛的球员。

我正在尝试将逻辑重写为以下内容:

  1. 找到玩最少游戏的玩家
  2. 找到一个玩家玩游戏最少的对手
  3. 匹配他们
  4. 如果玩家或对手已经达到10场比赛,请停止

我已经为此工作了好几天,但仍然无法使其正常运行。

我有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)时遇到问题。到目前为止,这是我的方法:

  1. playersAvailable按游戏最少的顺序排序

  2. 遍历playersAvailable,如果他们还没有玩过10场比赛,则可以将gamesCompleted列表与playersAvailable列表进行比较,寻找尚未参加比赛的对手,如果对手没有玩10场比赛,请创建一个对战。

  3. 通过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;

0 个答案:

没有答案