JavaScript | Случайное целое число из диапазона

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

Видео

 

Решение № 1

Суть решения № 1 будет заключаться в том, что мы сначала создаём массив со всеми возможными вариантами целых чисел диапазона, а потом мы перемешиваем массив и получаем из него первый элемент. Этот первый элемент всегда будет случайным.

Напишем функцию получения случайного целого числа из диапазона от наименьшего к наибольшему:

function getRandomItnegralNumber (a, b) {
   if(a>b){c=b; b=a; a=c};
   var arr = [];
   for(i=0; i <=(b-a); i++){
      arr[i]=[Math.random(), i+a];
   }
   return arr.sort()[0][1];
}

В этой функции есть защита от перемены местами наибольшего и наименьшего чисел. Теперь нет разницы. Параметры можно передавать как удобно. За это отвечает выражение:

if(a>b){c=b; b=a; a=c};

Чтобы переставить местами параметры оно использует дополнительную переменную «c», чтобы произвести перестановку. Это всё равно что пытаться пересыпать две разные крупы между двумя контейнерами для хранения круп. Без третьего контейнера вам этого не сделать т. к. в противном случае крупы гречи и риса перемешаются между собой и произойдёт нарушение процесса перестановки.

Далее мы создаём пустой массив, который будет хранить в себе пары:

  • случайное число от 0 до 1 (не включая 1)
  • последовательное, прирастающее на единицу целое число

Далее цикл будет пробегать такое количество раз, которое составляет разницу между числами «b» и «a«.

После цикла массив будет отсортирован по первым элементам внутренних массивов. В этот момент вторые элементы внутренних массивов изменять свой последовательный порядок.

Сначала мы получим первый элемент массива «arr«, который будет парой (массивом). Затем мы получим второй элемент из пары — это будет случайное целое число из нашего диапазона.

 

Поделись записью