Проблемы при создании объекта с использованием данных из 3 других объектов - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть функция 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.

Partial Code, когда вы перебираете противников с помощью 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...