Das Beispiel in diesem Artikel beschreibt die Methode zum Randomisieren des Werteindex im Array und zum Erstellen eines Zufallsarrays mithilfe von JavaScript. Teilen Sie es als Referenz mit allen. Die Details sind wie folgt:
Heute habe ich in der QW-Kommunikationsgruppe gesehen, wie einige Studenten das Problem der Randomisierung von Arrays diskutierten. Der angegebene Algorithmus war sehr gut und erinnerte mich an den nicht so „schönen“ I hatte zuvor eine Methode implementiert. Denken Sie darüber nach: Manchmal, wenn wir damit beschäftigt sind, Geschäftscode zu schreiben, nur um seine Funktion zu implementieren, denken wir nicht viel darüber nach, ob es eine bessere Implementierungsmethode gibt.
Für dieses Array-Problem (dann die Werte in einem Array sortieren und ein neues Array zurückgeben) war meine vorherige Implementierungsmethode so:
function randArr(arr) { var ret = [], obj = {}, i = arr.length, l = i, n; while (--i >= 0) { n = Math.floor( Math.random() * l ); if (obj[n] === void 0) { ret[ret.length] = obj[n] = arr[n]; } else { i++; } } return ret; }
Der obige Code funktioniert. Es handelt sich jedoch nicht um einen guten Algorithmus. Er beabsichtigt, die Schleife „Länge des ursprünglichen Arrays“ zufällig auszuwählen und dann festzustellen, ob der Index verwendet wurde be Der Wert von wird in das neue Array eingefügt. Wenn er abgerufen wurde, wird der Dekrementierungsschlüssel i um 1 erhöht (der Zweck besteht darin, den Zyklus zu wiederholen, bis ein anderer Index abgerufen wird, der nicht abgerufen wurde). Die Leistung dieser Methode hängt von Ihrem Charakter ab. Ich glaube, dass Schüler, die diese Idee gesehen haben, den Grund verstehen werden.
Geben Sie nun den Algorithmus des Klassenkameraden in der Gruppe an:
function randArr(arr) { var ret = [], i = arr.length, n; arr = arr.slice(0); while (--i >= 0) { n = Math.floor( Math.random() * i); ret[ret.length] = arr.splice(n, 1)[0]; } return ret; }
Dies ist ein ziemlich cleverer Algorithmus, nachdem in jeder Schleife ein zufälliger Index verwendet und der Wert aus dem Array gelöscht wurde , sodass der Index, wenn er später immer noch zufällig abgerufen wird, nicht mehr der zuletzt abgerufene Wert ist und der Bereich der Zufallszahlen entsprechend der Länge des Arrays abnimmt, sodass Sie eine bestimmte Anzahl von Malen durchlaufen können auf einmal und erhalten Sie das ideale Ergebnis.
Ich habe auch eine verbesserte Version gesehen, die einige Leistungsprobleme berücksichtigt, die durch den Löschvorgang des Arrays verursacht werden, und den Mischalgorithmus von JK verwendet, dh jeden Löschvorgang in einen Positionsersetzungsvorgang umwandelt ( Der Wert von Der erhaltene Index wird mit dem Wert ausgetauscht, der dem aktuellen Dekrementierungsschlüssel i) entspricht, sodass die Auswirkung auf das gesamte Array minimal ist:
function randArr(arr) { var ret = [], i = arr.length, n; arr = arr.slice(0); while (--i >= 0) { n = Math.floor( Math.random() * i); ret[ret.length] = arr[n]; arr[n] = arr[i]; } return ret; }
Geben Sie abschließend ein „ „Erstellen Sie einen Zufall Bei der Methode „Array mit einem Wert zwischen Min und Max“ ähnelt das Algorithmusprinzip dem oben genannten:
function makeRandArr(min, max) { var ret = [], obj = {}, n; for (; max >= min; max--) { n = Math.ceil( Math.random() * (max - min) ) + min; ret[ret.length] = obj[n] || n; obj[n] = obj[max] || max; } return ret; }
Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel für die Verwendung von JavaScript zum Randomisieren des Werteindex in einem Array und zum Erstellen eines Zufallsarrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!