Heim > Web-Frontend > js-Tutorial > Beispielanalyse, wie makeArray() in jQuery mehrere Typen in ein natives JS-Array konvertiert

Beispielanalyse, wie makeArray() in jQuery mehrere Typen in ein natives JS-Array konvertiert

黄舟
Freigeben: 2017-07-19 09:24:53
Original
1433 Leute haben es durchsucht

jQuery.makeArray(obj) Der Zweck lässt sich anhand des Namens leicht erraten: Es sollte verwendet werden, um das eingehende Objekt in ein natives Array umzuwandeln.

Werfen wir einen Blick auf die offizielle Website. Erklärung: Konvertieren Sie ein Array-ähnliches Objekt in ein echtes JavaScript-Array. (Konvertieren Sie ein Array-ähnliches Objekt in ein natives JS-Array)

Welche Art von Objekt kann also als „Was ist mit“-Array bezeichnet werden? -ähnliches Objekt“? Beeilen Sie sich nicht, diese Frage zu beantworten, nachdem Sie den Artikel gelesen haben. Schauen Sie sich zunächst das folgende Experiment an:

HTMLCollection in natives Array konvertieren

<!doctype html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>jQuery.makeArray demo</title>
		<style>
			p {
				color: red;
			}
		</style>
		<script src="//code.jquery.com/jquery-1.10.2.js"></script>
	</head>
	<body>
		<p> First </p> <p> Second </p> <p> Third </p> <p> Fourth </p>
		<script>
			// Returns a NodeList
			var elems = document.getElementsByTagName("p");
			// Convert the NodeList to an Array
			var arr = jQuery.makeArray(elems);
			// Use an Array method on list of dom elements
			arr.reverse();
			$(arr).appendTo(document.body);
		</script>
	</body>
</html>
Nach dem Login kopieren

Das ist möglich Sehen Sie es hier in Chrome. Was durch document.getElementsByTagName("p") zurückgegeben wird, ist eine HTMLCollection

anstelle der auf der offiziellen Website erwähnten NodeList. Ich habe speziell nach dem Unterschied zwischen NodeList und HTMLCollection gesucht: Das HTMLCollection-Objekt und das NodeList-Objekt sind sehr ähnlich, aber auf ersteres kann sowohl mit Namen als auch mit numerischen Indizes zugegriffen werden, während auf letzteres nur mit numerischen Indizes zugegriffen werden kann (natürlich ist NodeList auch ein „Array-ähnliches Objekt“) ")

By Das Experiment ergab, dass Elems nach Namen und Array indiziert werden können. Fazit: Was von document.getElementsByTagName("p") in Chrome zurückgegeben wird, ist eine HTMLCollection

HTMLCollection kann seine Länge über elems.length erhalten, und seine Länge kann über elems.length ermittelt werden. Greift elems[0] wie die Zugriffsmethode eines Arrays auf die Elemente

zu? Tatsächlich handelt es sich nur um ein „Array-ähnliches Objekt“, aber es handelt sich nicht um ein natives Array von js, sodass auf die nativen Methoden des Arrays nicht zugegriffen werden kann, z. B. (.pop() und .reverse())

Dann wird das native JS-Array arr durch die Konvertierung von jQuery.makeArray(elems) erhalten, und dann können Sie die native Methode des Arrays verwenden!

JQuery-umschlossenes Array in natives Array konvertieren

Was kann zusätzlich zu HTMLCollection noch konvertiert werden? Haben Sie schon einmal von jQuery-verpackten Arrays gehört?

Aber ich muss darauf gestoßen sein. Sie können beispielsweise eine Gruppe von p über $('p') erhalten. Diese Gruppe von p ist ein von jQuery umschlossenes Array.

Ein weiteres Beispiel , über .map( )Die Funktion ruft auch ein von jQuery umschlossenes Array ab. Sie können auch die Länge verwenden, um die Länge abzurufen und über den Indexindex darauf zuzugreifen. Und das von jQuery umschlossene Array kann auch die Methoden verwenden bereitgestellt von jQuery.

kann über $.makeArray(obj) in ein natives Array konvertiert werden. Die gebräuchlichste Methode besteht beispielsweise darin, das jQuery-Array in der Funktion .map() abzurufen und es dann in ein natives Array zu konvertieren Erhalten Sie dann das Ergebnis über join()

Natürlich gibt es mehr als eine Möglichkeit, mit jQuery umschlossene Arrays in native Arrays umzuwandeln. Zu den häufigsten gehören .get() und .toArray()

JSON-Objekte in natives Array konvertieren

Diese Situation ist etwas komplizierter, da das JSON-Objekt kein „Array-ähnliches Objekt“ ist und wir daher eine Konvertierung benötigen

Bedenken Sie die verschiedenen „ „Array-ähnliche Objekte“, über die wir zuvor gesprochen haben? Sie können alle die Länge über .length erhalten und über einen Indexindex darauf zugreifen, z. B.: fakeArr.length, fakeArr[0]

Können wir das also ändern, indem wir JSON auf diese Weise unterstützen? -ähnliches Objekt“?

Entwerfen Sie es zuerst:

Damit JSON fakeArr.length unterstützt, müssen Sie nur ein Schlüssel-Wert-Paar mit dem Schlüssel als Länge definieren

Es scheint, dass die Unterstützung des Indexzugriffs auch einfach gelöst werden kann. Verwenden Sie außerdem einfach Zahlen als Schlüssel für Schlüssel-Wert-Paare~

Dann versuchen Sie es:

var fakeArray = {0: "张三", 1: "李四", 2:"朱六", length:3};
var realArray = $.makeArray(fakeArray);
console.log(fakeArray)
console.log(realArray)
realArray.reverse();
console.log(realArray);
Nach dem Login kopieren

Hast du es gesehen? Erfolg! Das realArray hier ist bereits das native Array von js, sodass Sie native Methoden wie reverse() verwenden können.

Es ist zu beachten, dass die Länge während des Konvertierungsprozesses sehr wichtig ist Diese Länge wird bestimmt Die Länge des konvertierten Arrays

Wenn die Länge im obigen Beispiel mit 2 angegeben ist, enthält das konvertierte Array nur die ersten beiden Elemente, nämlich ["Zhang San", "李思"]

Wenn die Länge im obigen Beispiel mit 4 angegeben ist, ist das konvertierte Array nicht das gewünschte Array, sondern ein Array ähnlich new Array().push(fakeArray)

Das obige ist der detaillierte Inhalt vonBeispielanalyse, wie makeArray() in jQuery mehrere Typen in ein natives JS-Array konvertiert. 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