2493 Stimmen

Generieren von zufälligen Ganzzahlen in JavaScript in einem bestimmten Bereich

Wie kann ich in JavaScript zufällige ganze Zahlen zwischen zwei festgelegten Variablen generieren, z. B. x = 4 und y = 8 würden jede der Zahlen 4, 5, 6, 7, 8 ausgeben?

2 Stimmen

Hier ist ein nützlicher Gist: gist.github.com/kerimdzhanov/7529623

15 Stimmen

Als kleine Anmerkung: Für diejenigen, die npm verwenden und nach einer schnellen, zuverlässigen und fertigen Lösung suchen, gibt es lodash.random, das mit einem super kleinen Footprint einfach erforderlich ist (es importiert nur die Methode selbst und nicht das gesamte lodash).

0 Stimmen

43voto

Prasobh.Kollattu Punkte 1511

Gib eine Zufallszahl zwischen 1 und 10 zurück:

Math.floor((Math.random()*10) + 1); 

Gib eine Zufallszahl zwischen 1 und 100 zurück:

Math.floor((Math.random()*100) + 1)

0 Stimmen

Ist Ihr "zwischen" inklusiv oder exklusiv? d.h. ist es [1,10], [1,10), (1,10] oder (1,10)?

1 Stimmen

Es ist teilweise inklusiv: [1, *)

0 Stimmen

Was ist das Bedürfnis nach + 1 am Ende der Funktion? Es funktioniert perfekt, denke ich.

39voto

Codler Punkte 10349
function randomRange(min, max) {
  return ~~(Math.random() * (max - min + 1)) + min
}

Alternative if you are using Underscore.js you can use

_.random(min, max)

2 Stimmen

Underscore bietet tatsächlich eine _.uniqueId()-Funktion, die Sie für Client-Seitenmodelle aufrufen können.

0 Stimmen

Durch die Verwendung von binären Operatoren (x << 0, x | 0, ~~x) anstelle von Math.floor() wird x in ein Zweierkomplement mit einem viel kleineren Bereich als Number.MAX_SAFE_INTEGER (2³²¹ gegenüber 2³) umgewandelt, daher muss es mit Vorsicht verwendet werden!

33voto

Stanislav Vincent Punkte 561

Wenn Sie eine Variable zwischen 0 und max benötigen, können Sie Folgendes verwenden:

Math.floor(Math.random() *  max);

0 Stimmen

Ist das Maximum inklusive oder exklusive?

3 Stimmen

@Tree unter Verwendung von Math.floor ist max exklusiv. Wenn Sie möchten, dass max inklusiv ist, könnten Sie Math.round verwenden.

1 Stimmen

Wie viele andere Antworten hier beantwortet dies nicht die Frage (meine Betonung): "Wie kann ich zufällige ganze Zahlen zwischen zwei angegebenen Variablen in JavaScript generieren, z.B. x = 4 und y = 8 würden jede der Zahlen 4, 5, 6, 7, 8 ausgeben?". Mit anderen Worten, eine Zufallszahl in einem bestimmten Bereich/geschlossenen Intervall ([4; 8] im Beispiel). Selbst der Titel sagt "in einem spezifischen Bereich". Dies gehört in die Kommentare.

22voto

Starkers Punkte 9683

Die anderen Antworten berücksichtigen nicht die vollkommen vernünftigen Parameter von 0 und 1. Stattdessen sollten Sie die round statt von ceil oder floor verwenden:

function randomNumber(minimum, maximum){
    return Math.round( Math.random() * (maximum - minimum) + minimum);
}

console.log(randomNumber(0,1));  # 0 1 1 0 1 0
console.log(randomNumber(5,6));  # 5 6 6 5 5 6
console.log(randomNumber(3,-1)); # 1 3 1 -1 -1 -1

1 Stimmen

Deine Antwort ist richtig, aber ich denke, dein Beispiel ist falsch.. console.log(randomNumber(5,6)); # 9 6 6 5 7 7 Kommen 9 und 7 zwischen 5 und 6? ...... du solltest es korrigieren oder erklären.

0 Stimmen

Das letzte Beispiel könnte als ein leerer Bereich betrachtet werden. Zum Beispiel ungültige Eingabeparameter. Mit einem leeren Ergebnis wird ein Fehler ausgegeben oder Ähnliches.

21voto

Kamil Kiełczewski Punkte 69048

Kryptographisch stark

Um eine kryptographisch starke Zufallszahl im Bereich [x,y] zu erhalten, versuchen Sie es mit:

let cs = (x,y) => x + (y - x + 1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32 | 0

console.log(cs(4, 8))

8 Stimmen

Dieses hier ist faszinierend

0 Stimmen

Ich würde das empfehlen

0 Stimmen

Ich bin bei diesem Thema in ein Kaninchenloch gefallen, als ich herausfinden wollte, was kryptografisch sicher überhaupt bedeutet. Am Ende landete ich hier: crypto.stackexchange.com/questions/39186/…

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