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

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

Мне необходимо сгенерировать массив из уникальных чисел.
Длина массива(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))
  • Вопрос задан
  • 253 просмотра
Подписаться 1 Средний 5 комментариев
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Какие есть способы создания массива:

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

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

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

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

function createRandomArr(length, min, max) {
  if (length > max - min + 1) {
    throw 'такого массива быть не может';
  }

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

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

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

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

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

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

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