Erwägen:
var myArray = ['January', 'February', 'March'];
Wie kann ich mit JavaScript einen zufälligen Wert aus diesem Array auswählen?
javascript
Sarah
quelle
quelle
Math.floor(Math.random(...))
Anruf, der abrundet.var rand = myArray[Math.random() * myArray.length>>0]
etwas schneller warvar rand = myArray[Math.random() * myArray.length | 0]
Wenn du schon hast Ihr Projekt Unterstriche oder Lodash enthält , können Sie diese verwenden
_.sample
.Wenn Sie mehr als ein Element zufällig erhalten müssen, können Sie dies als zweites Argument im Unterstrich übergeben:
oder verwenden Sie die
_.sampleSize
Methode in lodash:quelle
Prototyp-Methode
Wenn Sie vorhaben, häufig einen zufälligen Wert zu erhalten, möchten Sie möglicherweise eine Funktion dafür definieren.
Fügen Sie dies zunächst irgendwo in Ihren Code ein:
Jetzt:
Code, der unter den Bedingungen der CC0 1.0-Lizenz öffentlich zugänglich ist .
quelle
.sample()
jedes Array aufzurufen , um ein zufälliges Element zu erhalten~~
ist viel schneller alsMath.Floor()
, also wenn es um Leistungsoptimierung bei der Produktion von Ausgaben mit UI-Elementen geht,~~
gewinnt das Spiel. MEHR INFOWenn Sie jedoch wissen, dass das Array Millionen von Elementen enthalten wird, sollten Sie zwischen Bitwise Operator und Bitwise Operator
Math.Floor()
mit großen Zahlen ein seltsames Verhalten erzielen. Siehe das folgende Beispiel, das mit der Ausgabe erklärt wurde. MEHR INFOquelle
Math.floor
jetzt verwenden :)Angenommen, Sie möchten ein zufälliges Element auswählen, das sich vom letzten Mal unterscheidet (nicht wirklich zufällig, aber dennoch eine häufige Anforderung) ...
Aufbauend auf der Antwort von @Markus können wir eine weitere Prototypfunktion hinzufügen:
Und so umsetzen:
quelle
Wenn Sie feste Werte haben (z. B. eine Monatsnamenliste) und eine einzeilige Lösung wünschen
Der zweite Teil des Arrays ist eine Zugriffsoperation wie unter Warum ist [5,6,8,7] [1,2] = 8 in JavaScript beschrieben?
quelle
Die kürzeste Version:
quelle
| 0
das| 0
selbst ist eine bitweise Operation, die nichts bewirkt, aber in Javascript werden Floats vor jeder bitweisen Operation in Ints konvertiert . Es ist also so etwas wie, dass+ ''
man eigentlich nichts macht, sondern Dinge in Strings konvertieren kann.Math.floor
aber es ist das Richtige, was hier zu tun ist. Es ist ein Operator, also schneller alsMath.floor
wenn nur, weil zu jeder Zeit während der Ausführung Code ausgeführt werden kannMath.floor = someOtherFunction
und sie dies nicht für '|' tun können. Auf der anderen Seite wieMath.floor
und|
verschieden tryMath.floor(-1.5)
vs-1.5 | 0
. Übrigens brauchen Sie die Klammern nicht.|
hat eine sehr niedrige Priorität.Wenn Sie es wie die Lösung von Pascual in eine Zeile schreiben möchten, besteht eine andere Lösung darin, es mit der Suchfunktion von ES6 zu schreiben (basierend auf der Tatsache, dass die Wahrscheinlichkeit einer zufälligen Auswahl eines Elements zufällig
n
ist1/n
):Verwenden Sie diesen Ansatz zu Testzwecken und wenn es einen guten Grund gibt, das Array nicht nur in einer separaten Variablen zu speichern. Andernfalls sind die anderen Antworten (
floor(random()*length
und die Verwendung einer separaten Funktion) Ihr Weg.quelle
Faker.js verfügt über viele Dienstprogrammfunktionen zum Generieren von zufälligen Testdaten. Dies ist eine gute Option im Kontext einer Testsuite:
Wie von Kommentatoren erwähnt, sollten Sie diese Bibliothek im Produktionscode im Allgemeinen nicht verwenden.
quelle
Faker
der ein zufälliges Array-Element ausgewählt wird.Das Bearbeiten des Array-Prototyps kann schädlich sein. Hier ist es eine einfache Funktion, die Arbeit zu erledigen.
Verwendungszweck:
quelle
Rekursive, eigenständige Funktion, die eine beliebige Anzahl von Elementen zurückgeben kann (identisch mit lodash.sampleSize ):
quelle
Verwenden Sie, um ein kryptostarkes Formulararray für zufällige Elemente zu erhalten
quelle
Dies ähnelt der Lösung von @Jacob Relkin, ist jedoch allgemeiner als diese:
Dies ist ES2015:
Der Code wählt eine Zufallszahl zwischen 0 und der Länge des Arrays aus und gibt dann das Element an diesem Index zurück.
quelle
var item = myArray[Math.floor(Math.random()*myArray.length)];
oder gleichwertige kürzere Version:
var item = myArray[(Math.random()*myArray.length)|0];
Beispielcode:
quelle
Einfache Funktion:
ODER
ODER
quelle
Meiner Meinung nach ist es besser, als mit Prototypen herumzuspielen oder sie rechtzeitig zu deklarieren, sie lieber einem Fenster auszusetzen:
Jetzt überall in Ihrer App nennen Sie es wie folgt:
Auf diese Weise können Sie die
for(x in array)
Schleife weiterhin ordnungsgemäß verwendenquelle
for...in
auf Arrays oder allgemein verwenden. Sie laufen Gefahr, die Prototypenkette zu durchlaufen. Es ist auch für alle Eigenschaften eines Objekts gedacht, nicht für alle Indizes in einem Array. Wenn Sie einen Iterator für ein Array verwenden möchten, verwenden Siefor (var i = 0; i < foo.length; i++){}
. Verwenden SieArray.prototype.forEach
stattdessen noch besser so etwas .Ich habe einen Weg gefunden, um die Komplikationen der Top-Antwort zu umgehen, indem ich die Variable rand mit einer anderen Variablen verkettet habe, mit der diese Nummer im Aufruf von myArray []; angezeigt werden kann. Durch Löschen des neu erstellten Arrays und Herumspielen mit seinen Komplikationen habe ich eine funktionierende Lösung gefunden:
quelle
concat
sich hier jemals etwas ändert ...random
selbst ändert es nicht und nichts anderes wird mehr als einmal aufgerufen ...Wenn Sie eine Konstantenvariable für das Array festlegen, haben Sie eine weitere Konstante, die zufällig zwischen den drei Objekten im Array auswählt, und die Funktion gibt dann einfach die Ergebnisse zurück.
quelle
Ein generischer Weg, um zufällige Elemente zu erhalten:
quelle
randojs macht dies etwas einfacher und lesbarer:
quelle
Hier ist ein Beispiel dafür:
quelle
eine andere einfache Methode:
quelle
Erstellen Sie einen zufälligen Wert und übergeben Sie ihn an das Array
Bitte versuchen Sie folgenden Code ..
quelle