Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как получить случайный элемент массива

Короткий ответ

Умножьте 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 — Округляет число вниз до целого.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.