Извлечь случайный элемент из массива - обычная задача, которую довольно легко реализовать. Есть много способов добиться этого, и я собираюсь обсудить некоторые из них.

Итак, давайте выясним, как этого добиться.

Здесь сначала мы создаем массив, используя синтаксис литерала массива ([]).

const fruits = ["Apple", "Banana", "Avocado", "Blackberries", "Grapes"];

Способы получения случайного элемента из массива

общий метод

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

const random = Math.random();

Теперь мы можем получить общую длину массива fruits.

const totalFruits = fruits.length

Затем умножьте случайное число на длину массива.

const randIndex = Math.floor(random * totalFruits)

В приведенном выше коде мы использовали функцию Math.floor(), чтобы преобразовать его в целое число.

Теперь мы получаем случайный элемент, используя randIndex

const randomFruits = fruits[randIndex]

Здесь мы можем записать приведенный выше код в одну строку.

const random = fruits[Math.floor(Math.random() * fruits.length)]; 
console.log("Random Fruit:", random); // => Random Fruit: Banana

Вместо Math.floor() мы также можем использовать ~~. Он намного быстрее, чем Math.floor(). Итак, когда дело доходит до оптимизации производительности при создании вывода с использованием элементов пользовательского интерфейса. ~~ выигрывает игру.

var random = fruits[~~(Math.random() * fruits.length)];
console.log("Random Fruit:", random);  // => Random Fruit: Banana

Но если вы знаете, что в массиве будут миллионы элементов, вы можете пересмотреть выбор между bitwise operator и Math.floor(). as побитовый оператор ведет себя странно с большими числами, потому что он ограничивает 32-битное целое число. См. Приведенный ниже пример с объяснением выходных данных.

const number = Math.floor(14444323231.2); // => 14444323231
const number = 14444323231.2 | 0; // => 1559421343

Автор: underscore.js и lodash.js

Если в ваш проект уже включены подчеркивание и lodash, вы можете использовать _.sample

const random = _.sample(fruits);
console.log("Random Fruit:", random); // => Random Fruit: Blackberries

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

const random = _.sample(fruits, 2);

для lodash используйте метод _.sampleSize

const random = _.sampleSize(fruits, 2);

Метод прототипа

Мы можем сделать прототип массива sample

Array.prototype.sample = function(){
  return this[Math.floor(Math.random()*this.length)];
}

В настоящее время:

const random = fruits.sample()
console.log("Random Fruit:", random); // => Random Fruit: Blackberries

Спасибо за чтение 😄. Если я что-то пропустил, или если у вас есть способ сделать это лучше, дайте мне знать.

подключимся в Твиттер.