Obtener un valor aleatorio de una matriz de JavaScript
Considerar:
var myArray = ['January', 'February', 'March'];
¿Cómo puedo seleccionar un valor aleatorio de esta matriz usando JavaScript?
Es una simple frase:
const randomElement = array[Math.floor(Math.random() * array.length)];
Por ejemplo:
const months = ["January", "February", "March", "April", "May", "June", "July"];
const random = Math.floor(Math.random() * months.length);
console.log(random, months[random]);
Si ya tienes un guión bajo o lodash incluido en tu proyecto, puedes usar _.sample
.
// will return one item randomly from the array
_.sample(['January', 'February', 'March']);
Si necesita obtener más de un elemento al azar, puede pasarlo como segundo argumento en guión bajo:
// will return two items randomly from the array using underscore
_.sample(['January', 'February', 'March'], 2);
o use el _.sampleSize
método en lodash:
// will return two items randomly from the array using lodash
_.sampleSize(['January', 'February', 'March'], 2);
Puede considerar definir una función en el prototipo de Array para crear un método [].sample()
que devuelva un elemento aleatorio.
Primero, para definir la función prototipo, coloque este fragmento en su código:
Array.prototype.sample = function(){
return this[Math.floor(Math.random()*this.length)];
}
Luego, para muestrear un elemento aleatorio de la matriz, simplemente llame a .sample()
:
[1,2,3,4].sample() //=> a random element
Voy a publicar estos fragmentos de código en el dominio público, según los términos de la licencia CC0 1.0 .
~~
es mucho más rápido que Math.Floor()
, por lo que cuando se trata de optimizar el rendimiento al producir resultados utilizando elementos de la interfaz de usuario, ~~
gana el juego. MÁS INFORMACIÓN
var rand = myArray[~~(Math.random() * myArray.length)];
Pero si sabe que la matriz tendrá millones de elementos, es posible que desee reconsiderar entre Operador bit a bit y Math.Floor()
, ya que los operadores bit a bit se comportan de manera extraña con números grandes. Vea el siguiente ejemplo explicado con el resultado.
var number = Math.floor(14444323231.2); // => 14444323231
var number = 14444323231.2 | 0; // => 1559421343