Мне дают ввод = 5.
Я хочу установить для ключа is_winner значение true для 5 случайных объектов в этом массиве.
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},
];
Первая рандомизация:
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},
];
Я попробовал следующее, у которого есть 2 для циклов, и один из них - 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;
}
}
Проверка, есть ли что-то более эффективное.