Einführung Iterator ist ein Entwurfsmuster, das Containerobjekte wie verknüpfte Listen und Arrays durchlaufen kann, ohne sich um die Implementierungsdetails der Speicherzuweisung von Containerobjekten kümmern zu müssen. Das einfache Verständnis besteht darin, dass wir die Daten einzeln abrufen können, wie bei einem sich bewegenden Zeiger, der uns jedoch anzeigt, wann sie enden. Auf diese Weise können wir tun, was wir tun müssen, nachdem wir die Daten erhalten haben. Wie sieht ein Iterator in js ausIn JavaScript ist ein Iterator ein spezielles Objekt. Dieses Iteratorobjekt hat eine next()-Methode und jeder Aufruf gibt ein Objekt (Ergebnisobjekt) zurück. Das Ergebnisobjekt hat zwei Attribute: eines ist value, das den nächsten zurückzugebenden Wert angibt; das andere ist done, ein Boolescher Wert. Wenn der letzte Wert in der Sequenz iteriert wurde, ist es true. Der Iterator speichert außerdem einen internen Zeiger auf die Position des Wertes in der aktuellen Sammlung. Jeder Aufruf der Methode next() gibt den nächsten verfügbaren Wert zurück, ähnlich der Struktur des Objekts unten. { weiter: Funktion () { zurückkehren { Wert:'', erledigt: wahr / falsch } } } IterationsprotokollDa sich die Fähigkeiten der JavaScript-Sprache ständig verbessern, wurden einige neue Datentypen hinzugefügt, z. B. Map, Set, WeakMap usw. Um eine einheitliche Iteration dieser verschiedenen Datenstrukturen zu ermöglichen, hat es6 das Iterationsprotokoll hinzugefügt. Das Iterationsprotokoll ist keine neue integrierte Implementierung oder Syntax; es ist ein Protokoll. Diese Protokolle können von jedem Objekt implementiert werden, das bestimmte Konventionen befolgt. Das Iterationsprotokoll ist speziell in zwei Protokolle unterteilt: das iterierbare Protokoll und das Iteratorprotokoll. Das einfache Verständnis ist, dass in js jedes Objekt durchlaufen werden kann, solange es das Iterationsprotokoll erfüllt. Iterierbares ProtokollUm iterierbar zu sein, muss ein Objekt die Methode @@iterator implementieren. Dies bedeutet, dass das Objekt (oder ein Objekt in seiner Prototypenkette) eine Eigenschaft mit dem Schlüssel @@iterator haben muss, auf die über die Konstante Symbol.iterator zugegriffen werden kann: Einfach ausgedrückt: Wenn etwas durchquerbar sein soll, muss es einen @@iterator haben, auf den über Symbol.iterator zugegriffen werden kann.
Iterator-ProtokollDas Iteratorprotokoll definiert eine Standardmethode zum Erstellen einer endlichen oder unendlichen Wertefolge. Wenn der Wert endlich ist, wird nach der Iteration aller Werte ein Standardrückgabewert zurückgegeben. Ein Objekt entspricht nur dann dem Iteratorprotokoll, wenn es eine next()- Methode mit der folgenden Semantik implementiert:
Iterativer ProzessWenn ein Objekt iteriert werden muss (z. B. wenn es in eine for...of-Schleife geschrieben wird), wird zuerst seine @@iterator-Methode ohne Parameter aufgerufen ( die zu diesem Zeitpunkt zurückgegebene Struktur ist { next: function () { }} ), und dann wird der von dieser Methode zurückgegebene Iterator verwendet, um den zu iterierenden Wert zu erhalten (tatsächlich wird diese next()-Methode nur wiederholt aufgerufen). IterationszusammenfassungDas Iterationsprotokoll kann wie folgt zusammengefasst werden: Um etwas zu durchlaufen, muss es das Iterable-Protokoll und das Iterator-Protokoll erfüllen.
Mit anderen Worten ist das Iteratorobjekt im Wesentlichen ein Zeigerobjekt. Der Zeiger wird durch die next()-Methode des Zeigerobjekts bewegt. Benutzerdefinierte IterationObjekte implementieren keine Iteratoren, daher können Objekte nicht durchlaufen werden. Um eine Objektdurchquerung zu implementieren, müssen wir den oben erwähnten Iterator auf dem Objekt implementieren. Normalerweise gibt es zwei Schreibweisen. Eine ist die traditionelle Schreibweise, bei der Sie den internen Status selbst steuern müssen. Die andere besteht darin, den Iterator des Generators zu verwenden, der von der Generatorfunktion zurückgegeben wird, um ihn zu implementieren. Der Code lautet wie folgt: Traditionelles Schreibenlass obj = { Name: 'Joel', Adresse: 'gz', [Symbol.iterator]: () => { // Verwenden Sie dies hier nicht, da es sich um eine Rückgabefunktion handelt. Dies geht verloren. let index = -1, atrrList = Object.keys(obj); const objIterator = { weiter: () => { let result = '' Index++ wenn (Index < atrrList.Länge) { Ergebnis = { Wert: atrrList[index], erledigt: falsch } } anders { Ergebnis = { erledigt: wahr } } Ergebnis zurückgeben } } Rückgabewert für ObjektIterator } } für (const item of obj) { Konsole.log('atrrs:' + Element + ',Wert:' + Objekt[Element]) } Generatorfunktion schreiben// Füge einen Iterator für ein nicht iterierbares Objekt hinzu let obj = { ein: 1, b: 2 } obj[Symbol.iterator] = Funktion* () { Lassen Sie Schlüssel = Objekt.Schlüssel(obj); //Länge des Schlüsselwerts abrufen let len = keys.length; //Schleifenvariable definieren let n = 0; //Bedingte Beurteilung while (n <= len - 1) { Ertrag { k: Schlüssel[n], v: Objekt[Schlüssel[n]] }; n++ } } //Der zurückgegebene Wert ist der Schlüssel und der Wert eines Objekts für (sei { k, v } von obj) { konsole.log(k, v); } Für weitere zugehörige Informationen wie integrierte iterierbare Objekte, Syntax für iterierbare Objekte, integrierte APIs, die iterierbare Objekte akzeptieren usw. klicken Sie bitte hier. Dies ist das Ende dieses Artikels zum Erlernen von JavaScript-Iteratoren. Weitere relevante Inhalte zu JavaScript-Iteratoren finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Implementierung der Bindungskonfiguration für duale Netzwerkkarten im Linux-System
>>: Beispiele für den Import und Export von MySQL-Tabellendaten
Boolescher MySQL-Wert, speichert „false“ oder „tr...
Inhaltsverzeichnis Vorwort 1. Konfigurieren Sie d...
Vorwort Wenn wir den Effekt der Online-Codekompil...
Docker ist ein Verwaltungstool, das Prozesse als ...
Weiterführende Literatur: MySQL8.0.20-Installatio...
Das Wesen einer flachen Website-Struktur liegt in...
In diesem Artikel wird der spezifische Code des V...
Auf Mobilgeräten sehe ich häufig kreisförmige Wel...
Bei der tatsächlichen Webentwicklung ist für das ...
Vorwort Ab React 16 wurde das Konzept der Fehlerg...
Methode 1: Verwenden Sie den Befehl lsof Mit dem ...
1. Die Rolle des Index In allgemeinen Anwendungss...
Die heruntergeladene Version ist die Zip-Dekompri...
Inhaltsverzeichnis 1. Die Beziehung zwischen Redu...
Inhaltsverzeichnis 1. Ursprungswert und Bezugswer...