Обновлено:

Массив случайными числами

Создать массив случайными числами в JavaScript требуется при тестировании, генерации данных и прототипировании интерфейсов. Ниже – пошаговые приёмы для разных сценариев: от простого диапазона до выборки из готового набора.

Сразу базовая формула. Метод Math.random() возвращает псевдослучайное число от 0 включительно до 1 исключительно. Чтобы получить целое значение в нужном диапазоне, результат умножают на интервал и округляют вниз через Math.floor().

Как создать массив случайными числами от 0 до max

Для заполнения массива целыми числами от 0 до заданного максимума подходит Array.from():

const count = 10;
const max = 100;
const numbers = Array.from({ length: count }, () => Math.floor(Math.random() * (max + 1)));

// [73, 8, 45, 91, 0, 66, 12, 88, 29, 54]

{ length: count } создаёт итерируемый объект с нужной длиной. Второй аргумент – функция-маппер, которая вызывается для каждой позиции.

Альтернатива на основе map():

const numbers = [...Array(10)].map(() => Math.floor(Math.random() * 51));

Оператор spread превращает псевдомассив из 10 пустых слотов в настоящий массив. Без spread метод map() проигнорирует неинициализированные элементы.

Как задать диапазон с минимальным и максимальным значением

Если нужен массив случайными числами в диапазоне от -50 до 50 или от 10 до 20, используйте смещение:

const min = -50;
const max = 50;
const count = 10;

const numbers = Array.from(
  { length: count },
  () => Math.floor(Math.random() * (max - min + 1)) + min
);

Формула (max - min + 1) задаёт количество возможных целых значений в интервале. Добавление min сдвигает результат к нужному отрезку. Для дробных чисел уберите Math.floor():

const floatNumbers = Array.from({ length: 5 }, () => Math.random() * (max - min) + min);

Как выбрать случайный элемент из существующего массива?

Иногда задача обратная: не создать числа, а достать случайное значение из готового списка. Генерируйте индекс через Math.random() и длину массива:

const arr = [12, 45, 67, 89, 34];
const random = arr[Math.floor(Math.random() * arr.length)];
// 67

При работе с Lodash или Underscore используйте _.sample(arr) для одного элемента или _.sampleSize(arr, n) для нескольких. Второй метод исключает повторы: каждый элемент выбирается не более одного раза techiedelight.com.

Классический цикл for и производительность

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

const length = 1000;
const min = 1;
const max = 100;
const numbers = new Array(length);

for (let i = 0; i < length; i += 1) {
  numbers[i] = Math.floor(Math.random() * (max - min + 1)) + min;
}

Этот подход даёт полный контроль: можно внедрить проверку уникальности или собирать статистику прямо внутри итерации ru.hexlet.io.

Генерация массива уникальных случайных чисел

Стандартный Math.random() допускает повторы. Чтобы получить массив без дублей, используйте Set:

const unique = new Set();
const min = 1;
const max = 1000;
const count = 100;

while (unique.size < count) {
  unique.add(Math.floor(Math.random() * (max - min + 1)) + min);
}

const numbers = [...unique];

Set автоматически отбрасывает одинаковые значения. Цикл продолжается, пока коллекция не наберёт нужный размер. Учитывайте: если диапазон (max - min) меньше требуемого count, цикл уйдёт в бесконечность.

Часто задаваемые вопросы

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

Используйте цикл while и объект Set. Генерируйте числа через Math.random(), добавляйте в Set до тех пор, пока его размер не станет равным нужной длине массива, затем преобразуйте в массив оператором spread.

Почему в коде используется Math.floor, а не Math.round?

Math.floor даёт равномерное распределение. Math.round сдвигает вероятность получения крайних значений min и max, потому что округляет с двух сторон.

Можно ли заполнить массив случайными числами дробной длины?

Да. Уберите Math.floor и умножайте Math.random() на необходимый диапазон. Если нужно округлить до определённого знака, примените toFixed() или математическое округление.

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

В чистом JS перемешайте массив алгоритмом Фишера-Йетса и возьмите первые N элементов. В Lodash используйте метод _.sampleSize(array, n).

Что быстрее: Array.from или цикл for?

На современных движках V8 разница в долях миллисекунд для массивов до 100 000 элементов. Цикл for немного быстрее при миллионах итераций, но Array.from короче и читабельнее.

  1. Random случайные числа онлайн – генератор и примеры
  2. Случайное число от 0: формулы и генератор на JavaScript
  3. Заполнить случайными числами: онлайн и в коде
  4. Случайное натуральное число: генерация и формулы
  5. Рандомный код: генерация случайных чисел в JavaScript
  6. Найти случайные числа – онлайн генератор и формулы