0

need your help. Trying to separate the playersArr into 2 arrays. Tried everything but i think my inputs and/or are missing something. Need some guidance. Thank you [1]: https://i.sstatic.net/Gz3M3.jpg

My code:

function newPlayer() {

  const newPlayer = document.createElement('li')
  newPlayer.innerText = addPlayer.value
  newPlayer.classList.add('player')
  players.appendChild(newPlayer)

  const trashButton = document.createElement('button');
  trashButton.innerHTML = '<i class="fas fa-trash"></i>';
  trashButton.classList.add('fa')
  newPlayer.appendChild(trashButton)

  playersArr.push(document.getElementById("input").value);

}
btnAddPlayer.addEventListener('click', newPlayer)


const nrTeams = 2
const player = document.querySelectorAll('player')
const genBtn = document.getElementById('gen-btn')


let teams = [];

const getTeams = () => {

  // Split the players array into set amount of teams.

  while (playersArr.length) {
    const teamSize = Math.ceil(playersArr.length / 2);
    const team = playersArr.slice(0, teamSize);
    teams.push(team);
    playersArr = playersArr.slice(teamSize);
  }
}

genBtn.addEventListener('click', getTeams())

3 Answers 3

3

the idea is to create chunk from array with your team member

with

  • a for loop (to get only max number of player)
  • slice method (to get one chunk)

you can use slice method to create a chunk of your array with maximum size of team size

   const getTeams = () => {
      const teamSize = Math.ceil(playersArr.length / nrTeams);
      for (let i = 0; i < playersArr.length; i += teamSize) {
        const team = playersArr.slice(i, i + teamSize);
        teams.push(team);
      }
    }
 

const teams = [];
const nrTeams = 2;
const playersArr = [
  'player1',
  'player2',
  'player3',
  'player4',
  'player5',
];

const getTeams = () => {
  const teamSize = Math.ceil(playersArr.length / nrTeams);
  for (let i = 0; i < playersArr.length; i += teamSize) {
    const team = playersArr.slice(i, i + teamSize);
    teams.push(team);
  }
}

getTeams();
console.log(teams);

Sign up to request clarification or add additional context in comments.

Comments

0

You can split them evenly with a filter and modulus operation:

let players = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let teams = [
  players.filter((_n, i) => i % 2 === 0),
  players.filter((_n, i) => i % 2 !== 0)
];
console.log(teams);

1 Comment

Thnak you so much
0

jeremy-denis Answered it very well, anyway if you need to ignore the for loop since you are using 2 teams, suppose teamOne and teamTwo, you can use this method block

const getTeams = () => {
  const teamSize = Math.ceil(playersArr.length / 2);

  const teamOne = playersArr.slice(0, teamSize);
  const teamTwo = playersArr.slice(teamSize);

  teams.push(teamOne, teamTwo);

}

1 Comment

Thank you so much, this made more sense to me at my level

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.