Heim > Web-Frontend > js-Tutorial > Detailliertes Beispiel für die Verwendung von JavaScript zum Randomisieren des Werteindex in einem Array und zum Erstellen eines Zufallsarrays

Detailliertes Beispiel für die Verwendung von JavaScript zum Randomisieren des Werteindex in einem Array und zum Erstellen eines Zufallsarrays

巴扎黑
Freigeben: 2017-09-14 11:59:11
Original
1527 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage