1268 Stimmen

Abrufen eines Zufallswertes aus einem JavaScript-Array

Bedenken Sie:

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

Wie kann ich mit JavaScript einen Zufallswert aus diesem Array auswählen?

2308voto

Jacob Relkin Punkte 156445

Es ist ein einfacher Einzeiler:

const randomElement = array[Math.floor(Math.random() * array.length)];

Zum Beispiel:

const months = ["January", "February", "March", "April", "May", "June", "July"];

const random = Math.floor(Math.random() * months.length);
console.log(random, months[random]);

137voto

Brendan Nee Punkte 4682

Wenn Sie bereits über Unterstrich o lodash in Ihrem Projekt enthalten sind, können Sie _.sample .

// will return one item randomly from the array
_.sample(['January', 'February', 'March']);

Wenn Sie mehr als ein Element nach dem Zufallsprinzip erhalten müssen, können Sie dies als zweites Argument in Unterstrich übergeben:

// will return two items randomly from the array using underscore
_.sample(['January', 'February', 'March'], 2);

oder verwenden Sie die _.sampleSize Methode in lodash:

// will return two items randomly from the array using lodash
_.sampleSize(['January', 'February', 'March'], 2);

62voto

Ben Aubin Punkte 5326

Sie können in Erwägung ziehen, eine Funktion für den Array-Prototyp zu definieren, um eine Methode zu erstellen [].sample() die ein zufälliges Element zurückgibt.

Um die Prototyp-Funktion zu definieren, fügen Sie zunächst diesen Ausschnitt in Ihren Code ein:

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

Um später ein zufälliges Element aus dem Array zu entnehmen, rufen Sie einfach .sample() :

[1,2,3,4].sample() //=> a random element

Ich gebe diese Codeschnipsel für die Öffentlichkeit frei, unter den Bedingungen der <a href="https://creativecommons.org/publicdomain/zero/1.0/" rel="noreferrer">CC0 1.0 Lizenz </a>.

51voto

Ankur Soni Punkte 5137

~~ ist viel schneller als Math.Floor() Wenn es also um die Leistungsoptimierung bei der Produktion von Ausgaben mit UI-Elementen geht, ~~ gewinnt das Spiel. MEHR INFO

var rand = myArray[~~(Math.random() * myArray.length)];

Wenn Sie aber wissen, dass das Array Millionen von Elementen haben wird, dann sollten Sie vielleicht noch einmal zwischen Bitwise Operator und Math.Floor() , da sich bitweise Operatoren bei großen Zahlen seltsam verhalten. Siehe untenstehendes Beispiel, das mit der Ausgabe erklärt wird.

var number = Math.floor(14444323231.2); // => 14444323231
var number = 14444323231.2 | 0; // => 1559421343

43voto

foxiris Punkte 2453

Die kürzeste Version:

var myArray = ['January', 'February', 'March']; 
var rand = myArray[(Math.random() * myArray.length) | 0]
console.log(rand)

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