


Einführung in die Prinzipien von Iteratoren und iterierbaren Objekten in ES6 (mit Beispielen)
Dieser Artikel bietet Ihnen eine Einführung in die Prinzipien von Iteratoren und iterierbaren Objekten in ES6 (mit Beispielen). Ich hoffe, dass er Ihnen weiterhilft.
Die neuen Array-Methoden, Sammlungen, for-of-Schleifen, Spread-Operatoren (...) und sogar die asynchrone Programmierung von ES6 basieren alle auf der Implementierung eines Iterators (Iterator). In diesem Artikel werden die Iteratoren und Generatoren von ES6 ausführlich erläutert und die internen Prinzipien und die Verwendung iterierbarer Objekte weiter untersucht
Das Prinzip von Iteratoren
Verarbeitung von Arrays in Programmiersprachen Wenn Sie eine Schleifenanweisung oder eine Sammlung verwenden, müssen Sie eine Variable initialisieren, um die Iterationsposition aufzuzeichnen. Die programmgesteuerte Verwendung von Iteratoren kann diese Datenoperation vereinfachen.Wie entwerfe ich einen Iterator?
Der Iterator selbst ist ein Objekt. Dieses Objekt verfügt über die next()-Methode, um das Ergebnisobjekt zurückzugeben. Dieses Ergebnisobjekt verfügt über den nächsten Rückgabewert und den booleschen Abschlusswert der Iteration, der das simuliert Erstellung eines einfachen Iterators wie folgt:
Wennfunction createIterator(iterms) { let i = 0 return { next() { let done = (i >= iterms.length) let value = !done ? iterms[i++] : undefined return { done, value } } } } let arrayIterator = createIterator([1, 2, 3]) console.log(arrayIterator.next()) // { done: false, value: 1 } console.log(arrayIterator.next()) // { done: false, value: 2 } console.log(arrayIterator.next()) // { done: false, value: 3 } console.log(arrayIterator.next()) // { done: true, value: undefined }
Jedes Mal, wenn next() des Iterators aufgerufen wird, wird das nächste Objekt zurückgegeben, bis der Datensatz erschöpft ist.
Die Regeln zum Schreiben von Iteratoren in ES6 sind ähnlich, aber es werden Generatorobjekte eingeführt, um das Erstellen von Iteratorobjekten zu erleichtern
2. Erstellen Sie Iteratoren
ES6 kapselt einen Generator zum Erstellen von Iteratoren. Offensichtlich ist ein Generator eine Funktion, die einen Iterator zurückgibt, der durch ein Sternchen (*) nach der Funktion dargestellt wird, und das neue interne Sonderschlüsselwort yield verwendet, um den Rückgabewert der next()-Methode des Iterators anzugeben.
Wie erstelle ich einen Iterator mit ES6-Generatoren? Ein einfaches Beispiel lautet wie folgt:
function *createIterator() { yield 123; yield 'someValue' } let someIterator = createIterator() console.log(someIterator.next()) // { value: 123, done: false } console.log(someIterator.next()) // { value: 'someValue', done: false } console.log(someIterator.next()) // { value: undefined, done: true }
Mit dem Schlüsselwort yield können Sie jeden Wert oder Ausdruck zurückgeben und Elemente stapelweise zum Iterator hinzufügen:
// let createIterator = function *(items) { // 生成器函数表达式 function *createIterator(items) { for (let i = 0; i < items.length; i++) { yield items[i] } } let someIterator = createIterator([123, 'someValue']) console.log(someIterator.next()) // { value: 123, done: false } console.log(someIterator.next()) // { value: 'someValue', done: false } console.log(someIterator.next()) // { value: undefined, done: true }
Da es sich um den Generator selbst handelt Als Funktion kann sie dem Objekt hinzugefügt werden und wird wie folgt verwendet:
Eine Funktion derlet obj = { // createIterator: function *(items) { // ES5 *createIterator(items) { // ES6 for (let i = 0; i < items.length; i++) { yield items[i] } } } let someIterator = obj.createIterator([123, 'someValue'])
Diese Möglichkeit, die Funktionsausführung automatisch abzubrechen, führt zu vielen erweiterten Einsatzmöglichkeiten.
3. Iterierbare Objekte
Häufig verwendete Sammlungsobjekte (Arrays, Set/Map-Sammlungen) und Strings in ES6 sind iterierbare Objekte, und diese Objekte verfügen über Standard-Iteratoren und den Symbol.iterator Eigentum.
Durch Generatoren erstellte Iteratoren sind ebenfalls iterierbare Objekte, da Generatoren der Eigenschaft Symbol.iterator standardmäßig Werte zuweisen.
3.1 Symbol.iterator
Iterierbare Objekte haben die Eigenschaft Symbol.iterator, d. h. Objekte mit der Eigenschaft Symbol.iterator haben Standarditeratoren.
Wir können Symbol.iterator verwenden, um auf den Standarditerator eines Objekts zuzugreifen, beispielsweise für ein Array:
let list = [11, 22, 33] let iterator = list[Symbol.iterator]() console.log(iterator.next()) // { value: 11, done: false }
Symbol.iterator ruft den Standarditerator des iterierbaren Objekts des Arrays ab und bearbeitet es. Iteriert über die Elemente im Array.
Im Gegenteil, wir können Symbol.iterator verwenden, um zu erkennen, ob das Objekt ein iterierbares Objekt ist:
function isIterator(obj) { return typeof obj[Symbol.iterator] === 'function' } console.log(isIterator([11, 22, 33])) // true console.log(isIterator('sometring')) // true console.log(isIterator(new Map())) // true console.log(isIterator(new Set())) // true console.log(isIterator(new WeakMap())) // false console.log(isIterator(new WeakSet())) // false
Offensichtlich sind Arrays, Set/Map-Sammlungen und Strings alle iterierbare Objekte und WeakSet /WeakMap-Sammlungen (schwache Referenzsammlungen) sind nicht iterierbar.
3.2 Iterierbare Objekte erstellen
Benutzerdefinierte Objekte sind standardmäßig nicht iterierbar.
Wie gerade erwähnt, ist der durch den Generator erstellte Iterator auch ein iterierbares Objekt. Der Generator weist der Eigenschaft Symbol.iterator standardmäßig einen Wert zu.
Wie kann man also ein benutzerdefiniertes Objekt in ein iterierbares Objekt umwandeln? Durch Hinzufügen eines Generators zur Eigenschaft Symbol.iterator:
let collection = { items: [11,22,33], *[Symbol.iterator]() { for (let item of this.items){ yield item } } } console.log(isIterator(collection)) // true for (let item of collection){ console.log(item) // 11 22 33 }
Die Array-Elemente sind ein iterierbares Objekt, und das Sammlungsobjekt wird ebenfalls zu einem iterierbaren Objekt, indem der Eigenschaft Symbol.iterator ein Wert zugewiesen wird.
3.3 for-of
Beachten Sie, dass das letzte Beispiel for-of anstelle der Indexschleife verwendet, eine neue Funktion, die von ES6 für iterierbare Objekte hinzugefügt wurde.
Denken Sie über das Implementierungsprinzip der For-Of-Schleife nach.
Für iterierbare Objekte, die for-of verwenden, wird jedes Mal, wenn for-of ausgeführt wird, next() des iterierbaren Objekts aufgerufen und das Rückgabeergebnis in einer Variablen gespeichert. Die Ausführung wird bis zum fortgesetzt iterierbares Objekt Der Wert des done-Attributs ist falsch.
// 迭代一个字符串 let str = 'somestring' for (let item of str){ console.log(item) // s o m e s t r i n g }
Im Wesentlichen ruft for-of die Attributmethode Symbol.iterator der Zeichenfolge str auf, um den Iterator zu erhalten (dieser Vorgang wird von der JS-Engine abgeschlossen) und ruft dann zum Speichern mehrmals die Methode next() auf der Objektwert in der Elementvariablen.
Die Verwendung von for-of für nicht iterierbare Objekte, null oder undefiniert, meldet einen Fehler!3.4 Spread-Operator (...)
Der ES6-Syntax-Zucker-Spread-Operator (...) bedient auch iterierbare Objekte, das heißt, er kann nur Arrays und Sammlungen „verteilen“. , Strings, benutzerdefinierte iterierbare Objekte.
Die folgende Kastanie gibt die von verschiedenen iterierbaren Objekterweiterungsoperatoren berechneten Ergebnisse aus:
let str = 'somestring' console.log(...str) // s o m e s t r i n g let set = new Set([1, 2, 2, 5, 8, 8, 8, 9]) console.log(set) // Set { 1, 2, 5, 8, 9 } console.log(...set) // 1 2 5 8 9 let map = new Map([['name', 'jenny'], ['id', 123]]) console.log(map) // Map { 'name' => 'jenny', 'id' => 123 } console.log(...map) // [ 'name', 'jenny' ] [ 'id', 123 ] let num1 = [1, 2, 3], num2 = [7, 8, 9] console.log([...num1, ...num2]) // [ 1, 2, 3, 7, 8, 9 ] let udf console.log(...udf) // TypeError: undefined is not iterable
Wie aus dem obigen Code ersichtlich ist, kann der Erweiterungsoperator (...) iterierbare Objekte bequem konvertieren ein Array. Wie for-of meldet der Spread-Operator (...) einen Fehler, wenn er auf nicht iterierbare Objekte, null oder undefiniert, angewendet wird!
4. Standard-Iterator
ES6 为很多内置对象提供了默认的迭代器,只有当内建的迭代器不能满足需求时才自己创建迭代器。
ES6 的 三个集合对象:Set、Map、Array 都有默认的迭代器,常用的如values()方法、entries()方法都返回一个迭代器,其值区别如下:
entries():多个键值对
values():集合的值
keys():集合的键
调用以上方法都可以得到集合的迭代器,并使用for-of循环,示例如下:
/******** Map ***********/ let map = new Map([['name', 'jenny'], ['id', 123]]) for(let item of map.entries()){ console.log(item) // [ 'name', 'jenny' ] [ 'id', 123 ] } for(let item of map.keys()){ console.log(item) // name id } for (let item of map.values()) { console.log(item) // jenny 123 } /******** Set ***********/ let set = new Set([1, 4, 4, 5, 5, 5, 6, 6,]) for(let item of set.entries()){ console.log(item) // [ 1, 1 ] [ 4, 4 ] [ 5, 5 ] [ 6, 6 ] } /********* Array **********/ let array = [11, 22, 33] for(let item of array.entries()){ console.log(item) // [ 0, 11 ] [ 1, 22 ] [ 2, 33 ] }
此外 String 和 NodeList 类型都有默认的迭代器,虽然没有提供其它的方法,但可以用for-of循环
Das obige ist der detaillierte Inhalt vonEinführung in die Prinzipien von Iteratoren und iterierbaren Objekten in ES6 (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

Wenn Sie den besten kostenlosen Generator für KI-Animationskunst suchen, können Sie Ihre Suche beenden. Die Welt der Anime-Kunst fasziniert das Publikum seit Jahrzehnten mit ihren einzigartigen Charakterdesigns, faszinierenden Farben und fesselnden Handlungen. Allerdings erfordert die Erstellung von Anime-Kunst Talent, Geschick und viel Zeit. Dank der kontinuierlichen Weiterentwicklung der künstlichen Intelligenz (KI) können Sie jetzt mithilfe des besten kostenlosen KI-Animationskunstgenerators die Welt der Animationskunst erkunden, ohne sich mit komplexen Technologien befassen zu müssen. Dies eröffnet Ihnen neue Möglichkeiten, Ihrer Kreativität freien Lauf zu lassen. Was ist ein KI-Generator für Anime-Kunst? Der AI Animation Art Generator nutzt hochentwickelte Algorithmen und Techniken des maschinellen Lernens, um eine umfangreiche Datenbank mit Animationswerken zu analysieren. Durch diese Algorithmen lernt und identifiziert das System verschiedene Animationsstile

Golang ist eine schnelle und effiziente statisch kompilierte Sprache. Aufgrund ihrer prägnanten Syntax und leistungsstarken Leistung ist sie im Bereich der Softwareentwicklung sehr beliebt. In Golang ist Iterator (Iterator) ein häufig verwendetes Entwurfsmuster zum Durchlaufen von Elementen in einer Sammlung, ohne die interne Struktur der Sammlung offenzulegen. In diesem Artikel wird detailliert beschrieben, wie Iteratoren in Golang implementiert und verwendet werden, und den Lesern anhand spezifischer Codebeispiele ein besseres Verständnis vermittelt. 1. Definition des Iterators In Golang besteht der Iterator normalerweise aus einer Schnittstelle und einer Implementierung

In der Java-Programmierung sind die Schnittstellen Iterator und Iterable wichtige Werkzeuge zur Verarbeitung von Elementen in Sammlungen. Die Iterator-Schnittstelle stellt Methoden für den iterativen Zugriff auf Sammlungselemente bereit, während die Iterable-Schnittstelle die Iterierbarkeit der Sammlung definiert, sodass über Iterator auf die Elemente in der Sammlung zugegriffen werden kann. Die enge Zusammenarbeit zwischen den beiden bietet uns eine allgemeine Methode zum Durchlaufen von Sammlungselementen. Iterator-Schnittstelle Die Iterator-Schnittstelle definiert die folgenden Methoden: booleanhasNext(): Prüft, ob noch Elemente in der Sammlung vorhanden sind. Enext(): Gibt das nächste Element in der Sammlung zurück. voidremove(): Entfernen Sie das aktuelle Element. Wiederholbar

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert
