Как сделать рандомный массив из 40 уникальных элементов?

Сначала подумал что можно рандомизированный массив засунуть в set, но как на выходе получить конкретное количество элементов не понял.
  • Вопрос задан
  • 320 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Сначала подумал что можно рандомизированный массив засунуть в set...

Надо наоборот - сначала set, потом массив:

function randomArr(length, min, max) {
  const values = new Set;
  while (values.size < length) {
    values.add((Math.random() * (max - min + 1) | 0) + min);
  }
  return [...values];
}


const arr = randomArr(40, 1, 100);

Но вообще, есть и другие методы.

Например, можно создать массив со всеми возможными значениями, и выдёргивать из него элементы случайным образом, сколько надо:

function randomArr(length, min, max) {
  const arr = Array.from({ length: max - min + 1 }, (n, i) => i + min);
  return Array.from({ length }, () => arr.splice(Math.random() * arr.length | 0, 1)[0]);
}

Или, создать массив со всеми возможными значениями, перемешать его, взять из начала сколько надо элементов:

function randomArr(length, min, max) {
  const arr = Array.from({ length: max - min + 1 }, (n, i) => i + min);

  for (let i = arr.length; --i > 0; ) {
    const j = Math.random() * (i + 1) | 0;
    [ arr[j], arr[i] ] = [ arr[i], arr[j] ];
  }

  return arr.slice(0, length);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы