Heim Web-Frontend js-Tutorial Einführung in Iteratoren und Generatoren in JavaScript ES6

Einführung in Iteratoren und Generatoren in JavaScript ES6

Aug 21, 2017 am 09:44 AM
javascript js 介绍

Dieser Artikel führt hauptsächlich in ein tiefgreifendes Verständnis der ES6-Iteratoren und -Generatoren ein. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber und werfen wir einen Blick darauf.

Dieser Artikel führt in ein tiefgreifendes Verständnis der Iteratoren und Generatoren von ES6 ein und teilt sie mit Ihnen. Die Details sind wie folgt:

Probleme mit Schleifenanweisungen


var colors = ["red", "green", "blue"];
for(var i=0; i<colors.length; i++){
  console.log(colors[i]);
}
Nach dem Login kopieren

Vor ES6 verfolgte diese Standard-For-Schleife den Index des Arrays über Variablen. Wenn mehrere Schleifen verschachtelt sind, müssen mehrere Variablen verfolgt werden, die Codekomplexität wird erheblich erhöht und es treten leicht Fehler durch die falsche Verwendung von Schleifenvariablen auf.

Iteratoren wurden eingeführt, um diese Komplexität zu beseitigen und Fehler in Schleifen zu reduzieren.

Was ist ein Iterator?

Machen wir uns zunächst mit der ES5-Syntax vertraut, um die Erstellung eines Iterators zu simulieren:


function createIterator(items) {
  var i = 0;
  
  return { // 返回一个迭代器对象
    next: function() { // 迭代器对象一定有个next()方法
      var done = (i >= items.length);
      var value = !done ? items[i++] : undefined;
      
      return { // next()方法返回结果对象
        value: value,
        done: done
      };
    }
  };
}

var iterator = createIterator([1, 2, 3]);

console.log(iterator.next()); // "{ value: 1, done: false}"
console.log(iterator.next()); // "{ value: 2, done: false}"
console.log(iterator.next()); // "{ value: 3, done: false}"
console.log(iterator.next()); // "{ value: undefiend, done: true}"
// 之后所有的调用都会返回相同内容
console.log(iterator.next()); // "{ value: undefiend, done: true}"
Nach dem Login kopieren

Oben geben wir ein Objekt zurück, indem wir die Funktion createIterator() aufrufen. Dieses Objekt verfügt über eine next()-Methode. Wenn die next()-Methode aufgerufen wird, ist das Rückgabeformat {Wert: 1, erledigt: false} Ergebnisobjekt.

Deshalb können wir es so definieren: Ein Iterator ist ein spezielles Objekt mit einer next()-Methode, und jedes Mal, wenn next() aufgerufen wird, wird ein Ergebnisobjekt zurückgegeben.

Mit Hilfe dieses Iteratorobjekts werden wir die Standard-for-Schleife transformieren, die wir gerade gestartet haben [vergessen Sie vorerst die neue for-of-Schleifenfunktion von ES6]:


var colors = ["red", "green", "blue"];
var iterator = createIterator(colors);
while(!iterator.next().done){
  console.log(iterator.next().value);
}
Nach dem Login kopieren

Was? Es geht nur darum, die Schleifenvariable zu eliminieren, aber es erfordert so viel Mühe. Ist der Verlust im Code nicht mehr wert als der Gewinn?

Das ist nicht der Fall. createIterator() muss schließlich nur einmal geschrieben werden und kann jederzeit wiederverwendet werden. Allerdings führt ES6 Generatorobjekte ein, die den Prozess der Iteratorerstellung vereinfachen können.

Was ist ein Generator?

Ein Generator ist eine Funktion, die einen Iterator zurückgibt, dem das Sternchen nach dem Funktionsschlüsselwort (*) übergeben wird. ), um anzugeben, dass das neue Schlüsselwort yield in der Funktion verwendet wird.


function *createIterator(items) {
  for(let i=0; i<items.length; i++) {
    yield items[i];
  }
}

let iterator = createIterator([1, 2, 3]);

// 既然生成器返回的是迭代器,自然就可以调用迭代器的next()方法
console.log(iterator.next()); // "{ value: 1, done: false}"
console.log(iterator.next()); // "{ value: 2, done: false}"
console.log(iterator.next()); // "{ value: 3, done: false}"
console.log(iterator.next()); // "{ value: undefiend, done: true}"
// 之后所有的调用都会返回相同内容
console.log(iterator.next()); // "{ value: undefiend, done: true}"
Nach dem Login kopieren

Oben haben wir die ES6-Generierung verwendet, was den Prozess der Iteratorerstellung erheblich vereinfacht hat. Wir übergeben ein Item-Array an die Generatorfunktion createIterator(). Innerhalb der Funktion generiert die for-Schleife kontinuierlich neue Elemente aus dem Array und fügt sie jedes Mal in den Iterator ein Wird der Iterator als ()-Methode bezeichnet, läuft die Schleife weiter und stoppt bei der nächsten yield-Anweisung.

So erstellen Sie einen Generator

Ein Generator ist eine Funktion:


function *createIterator(items) { ... }
Nach dem Login kopieren

Ja Geschrieben im Funktionsausdrucksmodus:


let createIterator = function *(item) { ... }
Nach dem Login kopieren

kann auch zu Objekten hinzugefügt werden, Objektliterale im ES5-Stil:


let o = {
  createIterator: function *(items) { ... }
};

let iterator = o.createIterator([1, 2, 3]);
Nach dem Login kopieren

Abkürzung für Objektmethoden im ES6-Stil:


let o = {
  *createIterator(items) { ... }
};

let iterator = o.createIterator([1, 2, 3]);
Nach dem Login kopieren

Iterierbares Objekt

In ES6 alle Sammlungsobjekte (Arrays, Set-Sammlungen und Map-Sammlungen) und Zeichenfolgen sind iterierbare Objekte, und iterierbare Objekte sind an Standarditeratoren gebunden.

Hier kommt die lang erwartete neue ES6-Schleifenfunktion for-of:


var colors = ["red", "green", "blue"];
for(let color of colors){
  console.log(color);
}
Nach dem Login kopieren

for-of-Schleife, die in On iterable verwendet werden kann Für Objekte wird der Standarditerator für iterierbare Objekte verwendet. Der allgemeine Prozess ist: Bei jeder Ausführung der for-of-Schleife wird die next()-Methode des iterierbaren Objekts aufgerufen und das vom Iterator zurückgegebene Wertattribut des Ergebnisobjekts in einer Variablen gespeichert. Die Schleife wird weiterhin ausgeführt Dieser Vorgang wird ausgeführt, bis das fertige Objekt zurückgegeben wird. Der Wert des Attributs ist wahr.

Wenn Sie nur die Werte in einem Array oder einer Sammlung iterieren müssen, ist die Verwendung einer for-of-Schleife anstelle einer for-Schleife eine gute Wahl.

Zugriff auf den Standarditerator

Iterierbare Objekte verfügen über eine Symbol.iterator-Methode. Wenn die for-of-Schleife ausgeführt wird, ist das Symbol des Farbarrays Rufen Sie die Iterator-Methode auf, um den Standard-Iterator zu erhalten. Dieser Prozess wird hinter der JavaScript-Engine abgeschlossen.

Wir können die Initiative ergreifen, um diesen Standarditerator dazu zu bringen, es zu spüren:


let values = [1, 2, 3];
let iterator = values[Symbol.iterator]();

console.log(iterator.next()); // "{ value: 1, done: false}"
console.log(iterator.next()); // "{ value: 2, done: false}"
console.log(iterator.next()); // "{ value: 3, done: false}"
console.log(iterator.next()); // "{ value: undefined, done: true}"
Nach dem Login kopieren

In diesem Code wird das Array über Symbol.iterator abgerufen Der Standarditerator für Werte und wird zum Durchlaufen der Elemente im Array verwendet. Das Ausführen einer for-of-Schleifenanweisung in der JavaScript-Engine ist ein ähnlicher Vorgang.

Verwenden Sie die Eigenschaft Symbol.iterator, um zu erkennen, ob das Objekt ein iterierbares Objekt ist:


function isIterator(object) {
  return typeof object[Symbol.iterator] === "function";
}

console.log(isIterable([1, 2, 3])); // true
console.log(isIterable(new Set())); // true
console.log(isIterable(new Map())); // true
console.log(isIterable("Hello")); // true
Nach dem Login kopieren

Erstellen Sie ein iterierbares Objekt

Wenn wir ein Objekt erstellen, fügen Sie einen Generator zur Symbol.iterator-Eigenschaft hinzu, um es in ein iterierbares Objekt umzuwandeln:


let collection = {
  items: [],
  *[Symbol.iterator]() { // 将生成器赋值给对象的Symbol.iterator属性来创建默认的迭代器
    for(let item of this.items) {
      yield item;
    }
  }
};

collection.items.push(1);
collection.items.push(2);
collection.items.push(3);

for(let x of collection) {
  console.log(x);
}
Nach dem Login kopieren

Eingebaute Iteratoren

Sammlungsobjekte in ES6, Arrays, Set-Sammlungen und Kartensammlungen, alle verfügen über drei integrierte Iteratoren:

  • entries() gibt einen Iterator zurück, dessen Wert aus mehreren Schlüssel-Wert-Paaren besteht. Wenn es sich um ein Array handelt, ist das erste Element die Indexposition. Wenn es sich um eine Menge handelt, sind sowohl das erste als auch das zweite Element Werte.

  • values() gibt einen Iterator zurück, dessen Wert der Wert der Sammlung ist.

  • keys() gibt einen Iterator zurück, dessen Wert alle Schlüsselnamen in der Sammlung sind. Wenn es ein Array ist, wird der Index zurückgegeben; wenn es ein Set ist, wird der Wert zurückgegeben (der Wert des Sets wird sowohl als Schlüssel als auch als Wert verwendet).

不同集合的默认迭代器

每个集合类型都有一个默认的迭代器,在for-of循环中,如果没有显式指定则使用默认的迭代器。按常规使用习惯,我们很容易猜到,数组和Set集合的默认迭代器是values(),Map集合的默认迭代器是entries()。

请看以下示例:


let colors = [ "red", "green", "blue"];
let tracking = new Set([1234, 5678, 9012]);
let data = new Map();

data.set("title", "Understanding ECMAScript 6");
data.set("format", "print");

// 与调用colors.values()方法相同
for(let value of colors) {
  console.log(value);
}

// 与调用tracking.values()方法相同
for(let num of tracking) {
  console.log(num);
}

// 与调用data.entries()方法相同
for(let entry of data) {
  console.log(entry);
}
Nach dem Login kopieren

这段代码会输入以下内容:

"red"
"green"
"blue"
1234
5678
9012
["title", "Understanding ECMAScript 6"]
["format", "print"]

for-of循环配合解构特性,操纵数据会更方便:


for(let [key, value] of data) {
  console.log(key + "=" + value);
}
Nach dem Login kopieren

展开运算符操纵可迭代对象


let set = new Set([1, 2, 3, 4, 5]),
  array = [...set];
  
console.log(array); // [1,2,3,4,5]
Nach dem Login kopieren

展开运算符可以操作所有的可迭代对象,并根据默认迭代器来选取要引用的值,从迭代器读取所有值。然后按返回顺序将它们依次插入到数组中。因此如果想将可迭代对象转换为数组,用展开运算符是最简单的方法。

Das obige ist der detaillierte Inhalt vonEinführung in Iteratoren und Generatoren in JavaScript ES6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Detaillierte Einführung in Wapi Detaillierte Einführung in Wapi Jan 07, 2024 pm 09:14 PM

Benutzer haben möglicherweise den Begriff Wapi bei der Nutzung des Internets gesehen, aber einige Leute wissen definitiv nicht, was Wapi ist. Im Folgenden finden Sie eine detaillierte Einführung, um denjenigen, die es nicht wissen, das Verständnis zu erleichtern. Was ist Wapi: Antwort: Wapi ist die Infrastruktur für WLAN-Authentifizierung und Vertraulichkeit. Dies entspricht Funktionen wie Infrarot und Bluetooth, die im Allgemeinen in der Nähe von Orten wie Bürogebäuden verfügbar sind. Im Grunde sind sie Eigentum einer kleinen Abteilung, sodass der Umfang dieser Funktion nur wenige Kilometer beträgt. Verwandte Einführung in Wapi: 1. Wapi ist ein Übertragungsprotokoll im WLAN. 2. Diese Technologie kann die Probleme der Schmalbandkommunikation vermeiden und eine bessere Kommunikation ermöglichen. 3. Zur Übertragung des Signals ist nur ein Code erforderlich.

Detaillierte Erklärung, ob Win11 das PUBG-Spiel ausführen kann Detaillierte Erklärung, ob Win11 das PUBG-Spiel ausführen kann Jan 06, 2024 pm 07:17 PM

Pubg, auch bekannt als PlayerUnknown's Battlegrounds, ist ein sehr klassisches Battle-Royale-Shooter-Spiel, das seit seiner Popularität im Jahr 2016 viele Spieler angezogen hat. Nach der kürzlichen Einführung des Win11-Systems möchten viele Spieler es auf Win11 spielen. Folgen wir dem Editor, um zu sehen, ob Win11 Pubg spielen kann. Kann Win11 Pubg spielen? Antwort: Win11 kann Pubg spielen. 1. Zu Beginn von Win11 wurden viele Spieler von Pubg ausgeschlossen, da Win11 TPM aktivieren musste. 2. Basierend auf dem Feedback der Spieler hat Blue Hole dieses Problem jedoch gelöst, und jetzt können Sie Pubg unter Win11 normal spielen. 3. Wenn Sie eine Kneipe treffen

Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Apr 03, 2024 am 11:55 AM

Die Technologie zur Gesichtserkennung und -erkennung ist bereits eine relativ ausgereifte und weit verbreitete Technologie. Derzeit ist JS die am weitesten verbreitete Internetanwendungssprache. Die Implementierung der Gesichtserkennung und -erkennung im Web-Frontend hat im Vergleich zur Back-End-Gesichtserkennung Vor- und Nachteile. Zu den Vorteilen gehören die Reduzierung der Netzwerkinteraktion und die Echtzeiterkennung, was die Wartezeit des Benutzers erheblich verkürzt und das Benutzererlebnis verbessert. Die Nachteile sind: Es ist durch die Größe des Modells begrenzt und auch die Genauigkeit ist begrenzt. Wie implementiert man mit js die Gesichtserkennung im Web? Um die Gesichtserkennung im Web zu implementieren, müssen Sie mit verwandten Programmiersprachen und -technologien wie JavaScript, HTML, CSS, WebRTC usw. vertraut sein. Gleichzeitig müssen Sie auch relevante Technologien für Computer Vision und künstliche Intelligenz beherrschen. Dies ist aufgrund des Designs der Webseite erwähnenswert

Detaillierte Einführung, ob der i5-Prozessor Win11 installieren kann Detaillierte Einführung, ob der i5-Prozessor Win11 installieren kann Dec 27, 2023 pm 05:03 PM

i5 ist eine Prozessorserie von Intel. Es gibt verschiedene Versionen des i5 der 11. Generation, und jede Generation hat eine unterschiedliche Leistung. Ob der i5-Prozessor win11 installieren kann, hängt daher davon ab, um welche Generation des Prozessors es sich handelt. Folgen wir dem Editor, um mehr darüber zu erfahren. Kann der i5-Prozessor mit Win11 installiert werden: Antwort: Der i5-Prozessor kann mit Win11 installiert werden. 1. Die Prozessoren der achten Generation und nachfolgender i51, der achten Generation und nachfolgender i5-Prozessoren können die Mindestkonfigurationsanforderungen von Microsoft erfüllen. 2. Daher müssen wir nur die Microsoft-Website aufrufen und einen „Win11-Installationsassistenten“ herunterladen. 3. Nachdem der Download abgeschlossen ist, führen Sie den Installationsassistenten aus und befolgen Sie die Anweisungen zur Installation von Win11. 2. i51 vor der achten Generation und nach der achten Generation

Wir stellen die neueste Sound-Tuning-Methode für Win 11 vor Wir stellen die neueste Sound-Tuning-Methode für Win 11 vor Jan 08, 2024 pm 06:41 PM

Nach dem Update auf das neueste Win11 stellen viele Benutzer fest, dass sich der Sound ihres Systems leicht verändert hat, sie wissen jedoch nicht, wie sie ihn anpassen können. Deshalb bietet Ihnen diese Website heute eine Einführung in die neueste Win11-Soundanpassungsmethode für Ihren Computer. Die Bedienung ist nicht schwer und die Auswahl ist vielfältig. Laden Sie sie herunter und probieren Sie sie aus. So passen Sie den Sound des neuesten Computersystems Windows 11 an 1. Klicken Sie zunächst mit der rechten Maustaste auf das Soundsymbol in der unteren rechten Ecke des Desktops und wählen Sie „Wiedergabeeinstellungen“. 2. Geben Sie dann die Einstellungen ein und klicken Sie in der Wiedergabeleiste auf „Lautsprecher“. 3. Klicken Sie anschließend unten rechts auf „Eigenschaften“. 4. Klicken Sie in den Eigenschaften auf die Optionsleiste „Erweitern“. 5. Wenn zu diesem Zeitpunkt das √ vor „Alle Soundeffekte deaktivieren“ aktiviert ist, brechen Sie den Vorgang ab. 6. Danach können Sie unten die Soundeffekte zum Einstellen auswählen und klicken

Detaillierte Informationen zum Speicherort des Druckertreibers auf Ihrem Computer Detaillierte Informationen zum Speicherort des Druckertreibers auf Ihrem Computer Jan 08, 2024 pm 03:29 PM

Viele Benutzer haben Druckertreiber auf ihren Computern installiert, wissen aber nicht, wie sie diese finden können. Deshalb gebe ich Ihnen heute eine detaillierte Einführung in den Speicherort des Druckertreibers im Computer. Für diejenigen, die es noch nicht wissen, werfen wir einen Blick darauf, wo der Druckertreiber zu finden ist, ohne die ursprüngliche Bedeutung zu ändern. Sie müssen die Sprache auf Chinesisch umschreiben und der Originalsatz muss nicht angezeigt werden. Es wird empfohlen, für die Suche 2. Suchen Sie nach „Toolbox“. Klicken Sie unten auf „Geräte-Manager“. Umgeschriebener Satz: 3. Suchen Sie unten nach „Geräte-Manager“ und klicken Sie darauf. 4. Öffnen Sie dann „Druckwarteschlange“ und suchen Sie Ihr Druckergerät. Diesmal sind es der Name und das Modell Ihres Druckers. 5. Klicken Sie mit der rechten Maustaste auf das Druckergerät und Sie können es aktualisieren oder deinstallieren.

PyCharm-Einsteigerhandbuch: Umfassende Analyse von Ersetzungsfunktionen PyCharm-Einsteigerhandbuch: Umfassende Analyse von Ersetzungsfunktionen Feb 25, 2024 am 11:15 AM

PyCharm ist eine leistungsstarke integrierte Python-Entwicklungsumgebung mit umfangreichen Funktionen und Tools, die die Entwicklungseffizienz erheblich verbessern können. Unter diesen ist die Ersetzungsfunktion eine der im Entwicklungsprozess häufig verwendeten Funktionen, die Entwicklern helfen kann, den Code schnell zu ändern und die Codequalität zu verbessern. In diesem Artikel wird die Ersetzungsfunktion von PyCharm ausführlich vorgestellt, kombiniert mit spezifischen Codebeispielen, um Anfängern zu helfen, diese Funktion besser zu beherrschen und zu verwenden. Einführung in die Ersetzungsfunktion Die Ersetzungsfunktion von PyCharm kann Entwicklern dabei helfen, bestimmten Text im Code schnell zu ersetzen

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

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

See all articles