Как получить случайный элемент массива
Короткий ответ
Умножьте Math.random() на длину и округлите вниз, чтобы получить правильный индекс:
const colors = ['red', 'green', 'blue'];
const color = colors[Math.floor(Math.random() * colors.length)];
console.log(colors.includes(color));Результат:
trueНесколько без повторов
Перемешайте копию массива и возьмите первые элементы:
const shuffle = (array) => {
const copy = [...array];
for (let i = copy.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[copy[i], copy[j]] = [copy[j], copy[i]];
}
return copy;
};
const winners = shuffle(['Anna', 'Oleg', 'Maria', 'Ivan', 'Olga']).slice(0, 2);
console.log(winners.length, new Set(winners).size);Результат:
2 2Частая ошибка
Math.round() вместо Math.floor() иногда даёт индекс, равный длине, и результатом будет undefined:
const colors = ['red', 'green', 'blue'];
console.log(colors[Math.round(0.9 * colors.length)]);Результат:
undefinedФункции из этого ответа
- Math.random — Возвращает случайное число от 0 до 1.
- Math.floor — Округляет число вниз до целого.