Obtener un valor aleatorio de una matriz de JavaScript

Resuelto Sarah asked hace 13 años • 29 respuestas

Considerar:

var myArray = ['January', 'February', 'March'];    

¿Cómo puedo seleccionar un valor aleatorio de esta matriz usando JavaScript?

Sarah avatar Dec 29 '10 07:12 Sarah
Aceptado

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]);
Expandir fragmento

Jacob Relkin avatar Dec 29 '2010 00:12 Jacob Relkin

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 _.sampleSizemétodo en lodash:

// will return two items randomly from the array using lodash
_.sampleSize(['January', 'February', 'March'], 2);
Brendan Nee avatar Jun 19 '2015 18:06 Brendan Nee

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 .

Ben Aubin avatar Nov 24 '2015 23:11 Ben Aubin

~~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
Ankur Soni avatar May 05 '2018 12:05 Ankur Soni