Untitled
unknown
javascript
3 years ago
1.7 kB
19
Indexable
const players = [
{ name: 'Anna', score: 1 },
{ name: 'Bartek', score: 2 },
{ name: 'Cezary', score: 1 },
{ name: 'Dawid', score: 1 },
{ name: 'Ewa', score: 1 },
{ name: 'Asia', score: 1 },
{ name: 'Kasia', score: 2 },
{ name: 'Basia', score: 1 },
{ name: 'Wojtek', score: 0 },
{ name: 'Tomek', score: 0 }
];
const playerBye = {name: 'BYE', score: 0}
const getRandomByGroup = (group) => {
const random = Math.floor(Math.random() * group.length)
const result = group.splice(random, 1)
return result[0]
}
players.sort((a, b) => b.score - a.score)
const pointGroups = []
for (let i = 0; i < players.length; i++) {
const player = players[i];
pointGroups[player.score]
? pointGroups[player.score].push(player)
: pointGroups[player.score] = [player]
}
console.log('pointGroups:', pointGroups)
const pairs = [];
let i = pointGroups.length-1
for(i; i >= 0; i--) {
const currentGroup = pointGroups[i]
if (currentGroup.length % 2 === 1) {
const nextGroup = pointGroups[i-1]
if ( nextGroup ) {
const tmpPlayer = nextGroup.splice(Math.floor(Math.random() * nextGroup.length), 1)
currentGroup.push(tmpPlayer[0])
} else {
currentGroup.push(playerBye)
}
}
console.log(i+' Group:', currentGroup)
for (let i = 0; i < currentGroup.length; i++) {
const playerOne = getRandomByGroup(currentGroup)
const playerTwo = getRandomByGroup(currentGroup)
pairs.push([playerOne, playerTwo])
}
}
console.log('Pairs:', pairs)Editor is loading...