1333 Stimmen

Erhalten Sie ein zufälliges Element aus einem JavaScript-Array

var items = Array(523, 3452, 334, 31, ..., 5346);

Wie erhalte ich ein zufälliges Element aus items?

2780voto

Kelly Punkte 37043
var element = elemente[Math.floor(Math.random()*elemente.length)];

128voto

Dino Reic Punkte 2961

1. Lösung: Array-Prototyp definieren

Array.prototype.random = function () {
  return this[Math.floor((Math.random()*this.length))];
}

das wird mit Inline-Arrays funktionieren

[2,3,5].random()

und natürlich auch mit vordefinierten Arrays

var list = [2,3,5]
list.random()

2. Lösung: Benutzerdefinierte Funktion definieren, die eine Liste akzeptiert und ein Element zurückgibt

function get_random (list) {
  return list[Math.floor((Math.random()*list.length))];
}

get_random([2,3,5])

127voto

chim Punkte 7997

Verwenden Sie Unterstrich (oder loDash :):

var randomArray = [
   '#cc0000','#00cc00', '#0000cc'
];

// use _.sample
var randomElement = _.sample(randomArray);

// manuell _.random verwenden
var randomElement = randomArray[_.random(randomArray.length-1)];

Oder um ein gesamtes Array zu mischen:

// Verwenden Sie die shuffle-Funktion von Unterstrich
var firstRandomElement = _.shuffle(randomArray)[0];

107voto

Alnitak Punkte 324207

Wenn Sie dieses Problem wirklich mit jQuery lösen müssen (Anmerkung: sollten Sie nicht):

(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;  // mit fairem Würfelwurf ausgewählt
        }
    };
})(jQuery);

var items = [523, 3452, 334, 31, ..., 5346];
var item = jQuery.rand(items);

Dieses Plugin gibt ein zufälliges Element zurück, wenn ein Array übergeben wird, oder einen Wert von [0 .. n), wenn eine Zahl übergeben wird, oder bei allem anderen einen garantiert zufälligen Wert!

Zur extra Unterhaltung wird das Array-Rückgabewert generiert, indem die Funktion rekursiv basierend auf der Länge des Arrays aufgerufen wird :)

Funktionsdemo unter http://jsfiddle.net/2eyQX/

69voto

K-Gun Punkte 10609

Hier ist noch eine andere Möglichkeit:

function rand(items) {
    // "~~" für die nächste "int"
    return items[~~(items.length * Math.random())];
}

Oder wie unten von @1248177 empfohlen:

function rand(items) {
    // "|" für eine Art von "int div"
    return items[items.length * Math.random() | 0];
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X