Как вывести неповторяющие числа с помощью рандома?

Нужно вывести массив чисел в N диапазоне так, чтобы не было дубликатов этих чисел.
Моя идея в том, что если выпадает повторное число прокидывать его в проверку, если оно близко к минимум делать +1 если близко к максимуму делать -1. Но такой вариант тоже не особо практичен. Какие есть способы ?

for (let i = 0; i < 3; i++) {
    let number = getRandomInt(1, 5);
    random.includes(number) ? random.push(number - 1) : random.push(number);


  }
  console.log(random);

  function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min) + min);
  }
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
Lapita12
@Lapita12
Тесты, тесты?
function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

const random = new Set();

while (random.size < 3) {
  let number = getRandomInt(1, 5);
  random.add(number);
}

console.log(Array.from(random));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
const getShuffledArray = (min, max) => {
    const randoms = Array(max - min + 1).fill(min).map((n, i) => n + i);
    for (let i = randoms.length - 1; i > 0; i -= 1) {
        const r = Math.floor(Math.random() * (i + 1));
        [randoms[i], randoms[r]] = [randoms[r], randoms[i]];
    }
    return randoms;
}

getShuffledArray(5, 10);
// [ 6, 10, 7, 5, 8, 9 ]
getShuffledArray(5, 10);
// [ 9, 6, 5, 7, 8, 10 ]
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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