JavaScript | Случайный элемент массива — efim360.ru

JavaScript | Случайный элемент массива

Мы хотим "выдёргивать" из массива случайный элемент. Как это сделать? Для решения задачи нужно воспользоваться методом random() конструктора Math.

Метод возвращает случайное число от 0 до 1, но не включая 1. То есть 0 может появиться, но 1 никогда не появится.

Но мы не сможем адекватно работать с Math.random() в чистом виде, т. к. индексы массивов всегда целочисленные и их количества могут быть разными. Мы напишем свою функцию, которая будет завязана на длине массива.

 

Видео

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

 

Функция, возвращающая случайный элемент массива

function getRandomArrayElement(arr){
   return arr[Math.floor(Math.random()*arr.length)]
}

 

Как работает функция?

Мы передаём в функцию массив из любых элементов. Это могут быть строки, числа, массивы, объекты и так далее.

В теле функции первым делом вычисляется случайное дробное десятичное число методом random() - не более единицы. Это число умножается на длину массива - arr.length.

Затем происходит округление числа до целого в меньшую сторону методом floor(). Это сделано для того, чтобы иногда получать элемент массива под нулевым индексом.

 

После этого вычисленное целое значение подставляется в качестве индекса обращения к передаваемому массиву.

Случайный элемент массива возвращается.

 

Пример для тестирования

let massiv = [11, 22, 33, 44, 55, 66];
getRandomArrayElement(massiv);

или

getRandomArrayElement([11, 22, 33, 44, 55, 66]);

 

Информационные ссылки

JavaScript | Как округлить до целого?

JavaScript | Как перемешать массив?

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

JavaScript | Массивы (Array)

Стандарт ECMAScript - Раздел "The Math Object" - https://tc39.es/ecma262/#sec-math-object

Стандарт ECMAScript - Раздел "21.3.2.27 Math.random ( )" - https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-math.random

Стандарт ECMAScript - Раздел "21.3.2.16 Math.floor ( x )" - https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-math.floor