Obtenga un elemento aleatorio de una matriz de JavaScript [duplicado]

Resuelto James asked hace 13 años • 13 respuestas
var items = Array(523, 3452, 334, 31, ..., 5346);

¿ Cómo obtengo un artículo aleatorio items?

James avatar May 07 '11 00:05 James
Aceptado
var item = items[Math.floor(Math.random()*items.length)];
Kelly avatar May 06 '2011 17:05 Kelly

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])
Dino Reic avatar Jun 10 '2014 09:06 Dino Reic

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];
chim avatar Nov 23 '2012 10:11 chim

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/

Alnitak avatar May 06 '2011 18:05 Alnitak