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

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

Мне необходимо сгенерировать массив из уникальных чисел.
Длина массива(unikArr) должна быть например равна lengthArr
Как в условии цикла указать, работать до тех пор пока массив не наполнится до нужно значения lengthArr
let generateUnikArr = (lengthArr) => {
                    //указываю диапазон чисел которые мне необходимы в массиве
                    let min = 1
                    let max = 100
                    let unikArr = []
                    let i = 0
                 
                    while( i < ???) {
                        //генерирую число
                        let randomNum = Math.floor(Math.random() * ((max + 1) - min)) + min 
                        //проверяю есть ли число в уже массиве
                        let dublicate = wins.includes(randomNum)
                        if( dublicate == true ) {
                            //если есть ничего не делаю
                        } else {
                            //если нет такого числа в массиве, то добавляю
                            wins.push(randomNum) 
                        }
                        i++
                    }

                    return unikArr 
                }
                console.log(randomWin(3))
  • Вопрос задан
  • 315 просмотров
Подписаться 1 Средний 5 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Какие есть способы создания массива:

  • Создавать случайные числа, пока не наберётся сколько надо.
  • Создать массив, состоящий из всех чисел интервала, выдернуть из него сколько надо случайных.
  • Создать массив, состоящий из всех чисел интервала, перемешать его, взять кусок нужного размера.

Что делать при попытке создать массив с длиной больше указанного интервала:

  • Кидать ошибку.
  • Создавать массив с длиной меньше указанной.

Вот как-то так:

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

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

или

function createRandomArr(size, min, max) {
  const len = max - min + 1;
  const arr = [...Array(len).keys()];

  return Array.from(
    { length: Math.min(size, len) },
    () => min + arr.splice(Math.random() * arr.length | 0, 1)[0]
  );
}

или

function createRandomArr(size, 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(-size);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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