Подсчет и сравнение - PullRequest
1 голос
/ 03 апреля 2020

Итак, я работаю над проектом для фанатов Warhammer40k. Я должен заблокировать регистрации на турнир, если уже зарегистрировано достаточное количество членов той же команды. Например: турнир 3 на 3, я должен заблокировать, если четверть любой команды хочет подписаться.

Поэтому мне нужно сравнить все team.name подключенного пользователя со всеми team.name всех участников и заблокировать, если team.name этих пользователей уже появлялось 3 раза.

В в начале я сделал это:

checkTeamsMember(){
    let teamNumberCheck: number = 0;
    for (let i = 0; i < this.myTeams.length; i++){
      for (let j = 0; j < this.teams.length; j++){
        if (this.teams[j].team_name == this.myTeams[i].name){
          teamNumberCheck ++
        }
      }
    }
    if (teamNumberCheck == this.tournamentToShow.team_length){
      this.activateButton = !this.activateButton;
    }
  }

Но это не решение, так как вы можете быть членом нескольких команд.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

В настоящее время ваш код отслеживает количество перекрытий для всех команд, но вам нужно отследить количество перекрытий для каждой команды:

checkTeamsMember(){
    let playerCanRegister: boolean = true; // whether all the user's teams have an open slot

    for (let i = 0; i < this.myTeams.length; i++){
      let teamNumberCheck: number = 0; // current # registered from team this.myTeams[i]

      for (let j = 0; j < this.teams.length; j++){
        if (this.teams[j].team_name == this.myTeams[i].name){
          teamNumberCheck ++
        }
      }

      let isTeamSpotOpen = (teamNumberCheck < this.tournamentToShow.team_length);
      playerCanRegister = playerCanRegister && isTeamSpotOpen; // if any team is closed, player cannot register
    }

    if (!playerCanRegister){
      this.activateButton = !this.activateButton;
    }
  }

Существуют и другие способы сделать это более эффективным (например, завершение l oop, как только вы обнаружите, что команда достигла максимальной регистрации).

0 голосов
/ 07 апреля 2020

Спасибо за ответ.

Извините за отсутствие объяснения, this.myTeams - это массив со всеми командами, в которых находится активный пользователь, и this.teams представляют массив со всеми team_name участников.

Так может быть:

let myTeams = ["hello world", "Testers"]
let teams = ["Orks", "hello world", "hello world", "Orks", "Testers"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...