I'm given an input = 5.
I want to set the is_winner key to true of 5 random objects in this array.
const participants = [
{code: '111111', is_winner: false},
{code: '222222', is_winner: false},
{code: '444444', is_winner: false},
{code: '777777', is_winner: false},
{code: '555555', is_winner: false},
{code: '666666', is_winner: false},
{code: '333333', is_winner: false},
{code: '888888', is_winner: false},
{code: '999999', is_winner: false},
];
First randomization:
const participants = [
{code: '111111', is_winner: false},
{code: '222222', is_winner: true},
{code: '444444', is_winner: false},
{code: '777777', is_winner: true},
{code: '555555', is_winner: false},
{code: '666666', is_winner: true},
{code: '333333', is_winner: true},
{code: '888888', is_winner: false},
{code: '999999', is_winner: true},
];
I tried the following which has 2 for loops, and one of them is an O(n^2)
const winners = [];
while (winners.length < 5) {
const randomParticipant = participants[Math.floor(Math.random() * participants.length)];
if (!winners.includes(randomParticipant.code)) {
winners.push(randomParticipant.code);
}
}
for (let participant of participants) {
if (winners.includes(participant.code)) {
participant.is_winner = true;
}
}
Looking to see if there is something more efficient.