Мы хотим «выдёргивать» из массива случайный элемент. Как это сделать? Для решения задачи нужно воспользоваться методом 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 | Как генерировать случайные слова из набора символов?
Стандарт 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