Задать вопрос
Sedbol
@Sedbol

Получить 6 не повторяющихся чисел Math.floor?

Как получить 6 не повторяющихся чисел от 1 до 36, и записать их в массив?
function e() {
           var e = Math.floor(Math.random() * 37) + 1;
        return e
    }
 var m=[e()];
     m.push(e());

    console.info(m) ;
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Вариант раз - создаём случайные числа, пока не наберётся сколько надо уникальных:

function createRandomArr(length, min, max) {
  if (length > (max -= ~-min)) {
    throw 'невозможно создать массив указанного размера';
  }

  const values = new Set;
  for (; values.size < length; values.add(min + Math.random() * max | 0)) ;
  return [...values];
}

const arr = createRandomArr(6, 1, 36);

Вариант два - создаём массив со всеми возможными значениями, и вырезаем из него случайные элементы:

const createRandomArr = (length, min, max) => Array
  .from({ length }, function() {
    return this.splice(Math.random() * this.length | 0, 1);
  }, Array.from({ length: max - min + 1 }, (_, i) => i + min))
  .flat();

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

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

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

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

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

Похожие вопросы