Obtenga un elemento aleatorio de una matriz de JavaScript [duplicado]
var items = Array(523, 3452, 334, 31, ..., 5346);
¿ Cómo obtengo un artículo aleatorio items
?
var item = items[Math.floor(Math.random()*items.length)];
1. solución: definir el prototipo de matriz
Array.prototype.random = function () {
return this[Math.floor((Math.random()*this.length))];
}
que funcionará en matrices en línea
[2,3,5].random()
y por supuesto matrices predefinidas
var list = [2,3,5]
list.random()
2. solución: definir una función personalizada que acepte la lista y devuelva el elemento
function get_random (list) {
return list[Math.floor((Math.random()*list.length))];
}
get_random([2,3,5])
Utilice guión bajo (o loDash :)):
var randomArray = [
'#cc0000','#00cc00', '#0000cc'
];
// use _.sample
var randomElement = _.sample(randomArray);
// manually use _.random
var randomElement = randomArray[_.random(randomArray.length-1)];
O para mezclar una matriz completa:
// use underscore's shuffle function
var firstRandomElement = _.shuffle(randomArray)[0];
Si realmente debes usar jQuery para resolver este problema (NB: no deberías):
(function($) {
$.rand = function(arg) {
if ($.isArray(arg)) {
return arg[$.rand(arg.length)];
} else if (typeof arg === "number") {
return Math.floor(Math.random() * arg);
} else {
return 4; // chosen by fair dice roll
}
};
})(jQuery);
var items = [523, 3452, 334, 31, ..., 5346];
var item = jQuery.rand(items);
Este complemento devolverá un elemento aleatorio si se le da una matriz, o un valor de [0 .. n) si se le da un número, o si se le da cualquier otra cosa, ¡un valor aleatorio garantizado!
Para mayor diversión, el retorno de la matriz se genera llamando a la función de forma recursiva según la longitud de la matriz :)
Demostración funcional en http://jsfiddle.net/2eyQX/