Random teams
by Marc Malignan
HTML
<div id="result"></div>
<button id="generate">GENERATE</button>
CSS
body {
background: #222;
color: #eee;
text-align: center;
}
#result {
display: flex;
width: 100%;
}
#result > ul {
flex-grow: 1;
flex-basis: 0;
text-align: left;
}
JavaScript
const USERS = [
'Félicien',
'Anne',
'Laurent',
'Maryna',
'Nicolas B',
'Emna',
'Marion',
'Thibault L',
'Lau',
'Vicouille',
'Flo',
'Nicoa',
'Florent',
'Marc',
];
const nbTeams = 3;
const rand = (min, max) =>
Math.floor(Math.random() * (max - min + 1) + min);
const generate = () => {
const users = [...USERS];
const teams = Array.from(Array(4), () => []);
const nbPerTeam = Math.ceil(users.length / nbTeams);
teams.forEach(team => {
for (let i=0; i<nbPerTeam; i++) {
if (users.length) {
const index = rand(0, users.length - 1);
const itemsToAdd = users.splice(index, 1);
team.push(itemsToAdd[0]);
}
}
});
return teams;
}
const draw = teams => {
const result = document.getElementById('result');
result.innerHTML = '';
teams.forEach(team => {
const list = document.createElement('ul');
team.forEach(user => {
const item = document.createElement('li');
item.innerHTML = user;
list.append(item);
});
result.append(list);
});
}
document
.getElementById('generate')
.addEventListener('click', () => {
const teams = generate();
draw(teams);
});