Wie kann ich ein Array mit 40 Elementen mit zufälligen Werten von 0 bis 39 erstellen? Mögen
[4, 23, 7, 39, 19, 0, 9, 14, ...]
Ich habe versucht, Lösungen von hier zu verwenden:
http://freewebdesigntutorials.com/javaScriptTutorials/jsArrayObject/randomizeArrayElements.htm
Aber das Array, das ich bekomme, ist sehr wenig zufällig. Es werden viele Blöcke aufeinanderfolgender Zahlen erzeugt ...
javascript
arrays
random
Alexandra
quelle
quelle
quelle
[...Array(40)].map(_=>Math.ceil(Math.random()*40));
11 Zeichen weniger als Ihre und 7 weniger als das Original.Math.ceil
, obwohl wir 0 als Option ausschneiden. Wenn wir 1-40 anstelle von 0-39 akzeptieren können, funktioniert dies. Andernfalls funktioniert dies , reduzieren Sie einen Charakter der Verbesserung für die Rückkehr zuMath.floor
)ES5:
ES6:
quelle
_
undi
Argumenten? In ES6 nicht erforderlich, es sei denn, ich irre mich._
ist das aktuelle Element undi
der aktuelle Index. Sie haben Recht, sie sind in beiden Fällen unnötig. Sie können sie entfernen, wenn Sie möchten.Noch kürzerer ES6-Ansatz:
Sie könnten auch eine Funktion mit Argumenten haben:
quelle
.fill()
ohne Parameter wird das Array mit füllenundefined
, was das einzige ist, was hier benötigt wird, um.map()
zu arbeitenKürzeste :-)
[...Array(40)].map(e=>~~(Math.random()*40))
quelle
~~
ist eine Abkürzung für Math.floor~~
Abkürzung? (edit: ahh, ich verstehe, es ist nur ein bitweiser Operator )Math.random()
gibt eine Zahl zwischen 0 und 1 zurück (exklusiv). Wenn Sie also 0-40 möchten, können Sie es mit 40 multiplizieren. Das höchste Ergebnis, das jemals erzielt werden kann, ist das, mit dem Sie multiplizieren.http://jsfiddle.net/robert/tUW89/
quelle
Sequenzen von zufälligen Gegenständen enthalten oft Blöcke aufeinanderfolgender Zahlen, siehe den Irrtum des Spielers . Beispielsweise:
quelle
Da der Zahlenbereich eingeschränkt ist, würde ich sagen, dass das Array am besten generiert, mit den Zahlen Null bis 39 (in der Reihenfolge) gefüllt und dann gemischt wird.
quelle
Math.random()
40-maliger Verwendung, da jede Zahl einmal und ohne Wiederholungen erzwungen wird.Das Array wurde auf 6 Werte begrenzt, um die Anzeige zu vereinfachen.
quelle
Dies ist die traditionelle Vorgehensweise, aber ich unterstütze @Pointy und @Phrogz, wenn Sie Duplikate in Ihrem Array vermeiden möchten, ohne teure Berechnungen durchführen zu müssen
quelle
Quirk Single-Line-Lösungen an jedem Tag.
Die Werte in Arrays sind völlig zufällig. Wenn Sie diese Snippets verwenden, ist dies anders.
Ein Array (Länge 10) mit zufälligen Zeichen in Kleinbuchstaben
Ein Array (Länge 10) mit zufälligen Ganzzahlen von 0 bis 99
Ein Array zufälliger Daten (von 10 Jahren bis vor heute)
Ein Array (Länge 10) zufällige Zeichenfolgen
Weitere nützliche Dinge finden Sie hier https://github.com/setivolkylany/nodejs-utils/blob/master/utils/faker.js
quelle
Mit einigen neuen ES6-Funktionen kann dies jetzt erreicht werden mit:
Beachten Sie, dass diese Lösung nur in modernen Browsern funktioniert, die diese ES6-Funktionen unterstützen: Pfeilfunktionen und Array.from ().
quelle
Siehe unten: -
quelle
von der von @Phrogz vorgeschlagenen Seite
quelle
Ich brauchte etwas anderes als das, was diese Lösungen gaben, da ich ein Array mit einer Reihe unterschiedlicher Zufallszahlen erstellen musste, die in einem bestimmten Bereich gehalten wurden. Unten ist meine Lösung.
Ich hätte es vorgezogen, keine Schleife zu erstellen, die die Möglichkeit hat, viele unnötige Anrufe zu tätigen (wenn Ihre Anzahl und Reichweite hoch sind und nahe an derselben Nummer liegen), aber dies ist das Beste, was ich mir vorstellen kann.
quelle
Ich denke, diese Methode wird das Problem mit den Wahrscheinlichkeiten lösen, die nur durch den Zufallszahlengenerator begrenzt sind.
quelle
Wenn Sie es mit zufälligen eindeutigen Werten von 0 benötigen ... Längenbereich:
quelle
Ich bin mir ziemlich sicher, dass dies der kürzeste Weg ist, um Ihr zufälliges Array ohne Wiederholungen zu erstellen
quelle
keys
Funktion :Array.from(Array(40).keys()).sort(_ => Math.random() - .5)
? Sie könnten sogar verrückt werden und den Spread-Operator verwenden! Aber das ist mir momentan zu aufregend.Ein bisschen spät zur Party, aber ich benutze randojs.com für Zufälligkeit, weil es solche Sachen super einfach macht. Sie können ein zufällig gemischtes Array von Zahlen von 0 bis 39 wie folgt erhalten:
Keine Aufregung mit der Logistik - außerdem ist es super lesbar und leicht zu verstehen :)
quelle
Generatoren
Ein Array mit einer Länge von 40 von 40 zufälligen möglichen Werten (0 - 39) ohne Wiederholung von Werten ist besser zu mischen, wie @Phrogz und @Jared Beck erklären. Ein anderer Ansatz, nur für die Aufzeichnungen, könnte die Verwendung von Generatoren sein. Bei diesem Ansatz mangelt es jedoch an Leistung im Vergleich zu anderen vorgeschlagenen Lösungen .
quelle