Извлечь случайный элемент из массива - обычная задача, которую довольно легко реализовать. Есть много способов добиться этого, и я собираюсь обсудить некоторые из них.
Итак, давайте выясним, как этого добиться.
Здесь сначала мы создаем массив, используя синтаксис литерала массива ([]).
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
Спасибо за чтение 😄. Если я что-то пропустил, или если у вас есть способ сделать это лучше, дайте мне знать.
подключимся в Твиттер.