| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Iterator | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit September 2016 browserbergreifend verfgbar.
* Einige Teile dieser Funktion werden mglicherweise unterschiedlich gut untersttzt.
Ein Iterator-Objekt ist ein Objekt, das dem Iterator-Protokoll entspricht: Es stellt eine next()-Methode bereit, die ein Iterator-Ergebnisobjekt zurckgibt. Alle integrierten Iteratoren erben von der Iterator-Klasse. Die Iterator-Klasse stellt eine [Symbol.iterator]()-Methode bereit, die das Iterator-Objekt selbst zurckgibt. Dadurch ist der Iterator auch iterierbar. Auerdem stellt die Klasse einige Hilfsmethoden fr die Arbeit mit Iteratoren bereit.
Die folgenden Iteratoren sind in JavaScript integriert:
Array.prototype.values(), Array.prototype.keys(), Array.prototype.entries(), Array.prototype[Symbol.iterator](), TypedArray.prototype.values(), TypedArray.prototype.keys(), TypedArray.prototype.entries(), TypedArray.prototype[Symbol.iterator]() und arguments[Symbol.iterator]() zurckgegeben wird.String.prototype[Symbol.iterator]() zurckgegeben wird.Map.prototype.values(), Map.prototype.keys(), Map.prototype.entries() und Map.prototype[Symbol.iterator]() zurckgegeben wird.Set.prototype.values(), Set.prototype.keys(), Set.prototype.entries() und Set.prototype[Symbol.iterator]() zurckgegeben wird.RegExp.prototype[Symbol.matchAll]() und String.prototype.matchAll() zurckgegeben wird.Generator-Objekt, das von Generatorfunktionen zurckgegeben wird.[Symbol.iterator]() des Segments-Objekts zurckgegeben wird, das Intl.Segmenter.prototype.segment() zurckgibt.Iterator.prototype.filter() und Iterator.prototype.map() zurckgegeben wird.Auch Web-APIs knnen Iteratoren zurckgeben. Einige verwenden die grundlegenden JavaScript-Iteratoren wieder, whrend andere eigene Iteratoren definieren. Zum Beispiel:
NodeList geben ber ihre jeweiligen Methoden keys(), values(), entries() und [Symbol.iterator]() einen Array Iterator zurck.Headers geben ber ihre jeweiligen Methoden keys(), values(), entries() und [Symbol.iterator]() einen eigenen Iterator-Typ wie Headers Iterator zurck.FontFaceSet geben ber ihre jeweiligen Methoden keys(), values(), entries() und [Symbol.iterator]() einen eigenen Iterator-Typ wie FontFaceSet Iterator zurck.Hinweis:
NodeIterator und andere ltere Schnittstellen tragen zwar entsprechende Namen, entsprechen aber weder dem Iterator-Protokoll noch dem Iterable-Protokoll.
Jeder dieser Iteratoren hat ein eigenes Prototypobjekt, das die fr den jeweiligen Iterator verwendete next()-Methode definiert. Beispielsweise erben alle String-Iterator-Objekte von einem verborgenen Objekt namens StringIteratorPrototype, dessen next()-Methode den String nach Codepunkten durchluft. StringIteratorPrototype besitzt auerdem eine [Symbol.toStringTag]-Eigenschaft, deren Anfangswert der String "String Iterator" ist. Diese Eigenschaft wird in Object.prototype.toString() verwendet. Entsprechend haben auch die anderen Iterator-Prototypen eigene [Symbol.toStringTag]-Werte, die den oben genannten Namen entsprechen.
Alle diese Prototypobjekte erben von Iterator.prototype. Dieser Prototyp stellt eine [Symbol.iterator]()-Methode bereit, die das Iterator-Objekt selbst zurckgibt. Dadurch ist der Iterator auch iterierbar.
Hinweis:
Diese Methoden sind Hilfsmethoden fr Iteratoren, nicht fr Iterables: Damit ein Objekt iterierbar ist, muss es lediglich eine [Symbol.iterator]()-Methode besitzen. Es gibt keinen gemeinsamen Prototyp, auf dem diese Methoden installiert werden knnten.
Die Iterator-Klasse selbst stellt einige Hilfsmethoden fr die Arbeit mit Iteratoren bereit. Beispielsweise knnten Sie versucht sein, Folgendes zu tun:
const nameToDeposit = new Map([
["Anne", 1000],
["Bert", 1500],
["Carl", 2000],
]);
const totalDeposit = [...nameToDeposit.values()].reduce((a, b) => a + b);
Dabei wird der von Map.prototype.values() zurckgegebene Iterator zuerst in ein Array umgewandelt. Anschlieend wird mit der Methode Array.prototype.reduce() die Summe berechnet. Dadurch wird jedoch ein temporres Array erstellt und das Array zweimal durchlaufen. Stattdessen knnen Sie die reduce()-Methode des Iterators selbst verwenden:
const totalDeposit = nameToDeposit.values().reduce((a, b) => a + b);
Diese Methode kann insbesondere hinsichtlich des Speicherverbrauchs effizienter sein, da sie den Iterator nur einmal durchluft, ohne Zwischenwerte zu speichern. Iterator-Hilfsmethoden sind erforderlich, um mit unendlichen Iteratoren zu arbeiten:
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const seq = fibonacci();
const firstThreeDigitTerm = seq.find((n) => n >= 100);
Sie knnen seq nicht in ein Array umwandeln, da es unendlich ist. Stattdessen knnen Sie die find()-Methode des Iterators selbst verwenden. Sie durchluft seq nur so weit, wie es ntig ist, um den ersten Wert zu finden, der die Bedingung erfllt.
Viele Iterator-Methoden haben Entsprechungen bei Array-Methoden, zum Beispiel:
Die Kombination aus Iterator.prototype.drop() und Iterator.prototype.take() entspricht in gewisser Weise Array.prototype.slice().
Hinweis: Iterator-Hilfsobjekte und Iterator-Hilfsmethoden sind zwei unterschiedliche Konzepte. Ein Iterator-Hilfsobjekt lsst sich zur Laufzeit erkennen, whrend Iterator-Hilfsmethode lediglich eine Bezeichnung fr eine Gruppe von Methoden zum besseren Verstndnis ist. Iterator Helper kann sich je nach Kontext auf das Objekt oder die Methode beziehen.
Von den Iterator-Hilfsmethoden geben filter(), flatMap(), map(), drop() und take() jeweils ein neues Iterator Helper-Objekt zurck. Dieses ist ebenfalls eine Iterator-Instanz, sodass sich die Hilfsmethoden verketten lassen. Alle Iterator-Hilfsobjekte erben von einem gemeinsamen Prototypobjekt, das das Iterator-Protokoll implementiert:
next()Ruft die next()-Methode des zugrunde liegenden Iterators auf, wendet die Hilfsmethode auf das Ergebnis an und gibt das Ergebnis zurck.
return()Ruft die return()-Methode des zugrunde liegenden Iterators auf und gibt das Ergebnis zurck.
Das Iterator-Hilfsobjekt nutzt dieselbe Datenquelle wie der zugrunde liegende Iterator. Wenn das Hilfsobjekt durchlaufen wird, wird daher auch der zugrunde liegende Iterator durchlaufen. Es gibt keine Mglichkeit, einen Iterator zu verzweigen, um ihn mehrfach durchlaufen zu knnen.
const it = [1, 2, 3].values();
const it2 = it.drop(0); // Essentially a copy
console.log(it.next().value); // 1
console.log(it2.next().value); // 2
console.log(it.next().value); // 3
Es gibt zwei Arten von Iteratoren: Objekte, die dem Iterator-Protokoll entsprechen (wofr mindestens eine next()-Methode vorhanden sein muss), und Objekte, die von der Iterator-Klasse erben und damit ber die Hilfsmethoden verfgen. Die eine Eigenschaft folgt nicht aus der anderen: Objekte, die von Iterator erben, sind nicht automatisch Iteratoren, da die Iterator-Klasse keine next()-Methode definiert. Das Objekt muss daher selbst eine next()-Methode definieren. Ein vollwertiger Iterator entspricht sowohl dem Iterator-Protokoll als auch der Vererbung von Iterator. Der meiste Code erwartet, dass Iteratoren vollwertige Iteratoren sind und dass Iterables vollwertige Iteratoren zurckgeben. Um vollwertige Iteratoren zu erstellen, definieren Sie eine Klasse, die Iterator erweitert, oder verwenden Sie die Methode Iterator.from().
class MyIterator extends Iterator {
next() {
//
}
}
const myIterator = Iterator.from({
next() {
//
},
});
Iterator()Dafr vorgesehen, von anderen Klassen erweitert zu werden, die Iteratoren erstellen. Bei direkter Instanziierung wird ein Fehler ausgelst.
Iterator.concat()Erstellt aus einer Liste iterierbarer Objekte ein neues Iterator-Objekt. Der neue Iterator gibt die Werte der bergebenen Iterables nacheinander aus.
Iterator.from()Erstellt aus einem Iterator oder einem iterierbaren Objekt ein neues Iterator-Objekt.
Iterator.zip()Erstellt ein neues Iterator-Objekt, das Elemente aus mehreren iterierbaren Objekten zusammenfasst. Es gibt Arrays aus, die jeweils die Elemente an derselben Position enthalten.
Iterator.zipKeyed()Erstellt ein neues Iterator-Objekt, das Elemente aus mehreren iterierbaren Objekten zusammenfasst. Es gibt Objekte aus, die jeweils die Elemente an derselben Position enthalten und deren Schlssel durch die Eingabe festgelegt werden.
Diese Eigenschaften sind auf Iterator.prototype definiert und werden von allen Iterator-Instanzen gemeinsam genutzt.
Iterator.prototype.constructorDie Konstruktorfunktion, die das Instanzobjekt erstellt hat. Fr Iterator-Instanzen ist der Anfangswert der Konstruktor Iterator.
Iterator.prototype[Symbol.toStringTag]Der Anfangswert der Eigenschaft [Symbol.toStringTag] ist der String "Iterator". Diese Eigenschaft wird in Object.prototype.toString() verwendet.
Hinweis:
Anders als [Symbol.toStringTag] bei den meisten integrierten Klassen ist Iterator.prototype[Symbol.toStringTag] aus Grnden der Webkompatibilitt beschreibbar.
Iterator.prototype.chunks() Gibt ein neues Iterator-Hilfsobjekt zurck, das die Elemente des ursprnglichen Iterators in aufeinanderfolgende Array-Blcke aufteilt. Bei jedem Iterationsschritt entnimmt das Hilfsobjekt dem zugrunde liegenden Iterator die angegebene Anzahl von Elementen und gibt sie gemeinsam aus.
Iterator.prototype.drop()Gibt ein neues Iterator-Hilfsobjekt zurck, das die angegebene Anzahl von Elementen am Anfang dieses Iterators berspringt.
Iterator.prototype.every()Gibt false zurck, wenn ein Element gefunden wird, das die angegebene Prffunktion nicht erfllt. Andernfalls gibt die Methode true zurck, wenn der Iterator erschpft ist, ohne dass ein solches Element gefunden wurde.
Iterator.prototype.filter()Gibt ein neues Iterator-Hilfsobjekt zurck, das nur die Elemente des Iterators ausgibt, fr die die angegebene Callback-Funktion true zurckgibt.
Iterator.prototype.find()Gibt das erste vom Iterator ausgegebene Element zurck, das die angegebene Prffunktion erfllt. Wenn kein Wert die Prffunktion erfllt, wird undefined zurckgegeben.
Iterator.prototype.flatMap()Gibt ein neues Iterator-Hilfsobjekt zurck, das jedes Element des ursprnglichen Iterators an eine Mapping-Funktion bergibt und die von ihr zurckgegebenen Elemente ausgibt. Diese befinden sich in einem anderen Iterator oder Iterable.
Iterator.prototype.forEach()Fhrt eine angegebene Funktion einmal fr jedes vom Iterator ausgegebene Element aus.
Iterator.prototype.includes()Gibt true zurck, wenn ein vom Iterator ausgegebenes Element dem angegebenen Wert entspricht. Andernfalls gibt die Methode false zurck, wenn der Iterator erschpft ist, ohne dass ein solches Element gefunden wurde.
Iterator.prototype.join()Gibt einen String zurck, der aus der Verkettung aller vom Iterator ausgegebenen Elemente besteht. Die Elemente werden durch Kommas oder einen angegebenen Trennstring getrennt.
Iterator.prototype.map()Gibt ein neues Iterator-Hilfsobjekt zurck, das die Elemente des Iterators ausgibt, nachdem sie jeweils durch eine Mapping-Funktion transformiert wurden.
Iterator.prototype.reduce()Fhrt fr jedes vom Iterator ausgegebene Element eine vom Benutzer bereitgestellte Reducer-Callback-Funktion aus und bergibt dabei den Rckgabewert der Berechnung fr das vorherige Element. Das Endergebnis der Anwendung des Reducers auf alle Elemente ist ein einzelner Wert.
Iterator.prototype.some()Gibt true zurck, wenn ein Element gefunden wird, das die angegebene Prffunktion erfllt. Andernfalls gibt die Methode false zurck, wenn der Iterator erschpft ist, ohne dass ein solches Element gefunden wurde.
Iterator.prototype.take()Gibt ein neues Iterator-Hilfsobjekt zurck, das die angegebene Anzahl von Elementen dieses Iterators ausgibt und dann endet.
Iterator.prototype.toArray()Erstellt eine neue Array-Instanz, die mit den vom Iterator ausgegebenen Elementen gefllt ist.
Iterator.prototype.windows() Gibt ein neues Iterator-Hilfsobjekt zurck, das ein gleitendes Fenster von Elementen ausgibt. Bei jedem Iterationsschritt gibt das Hilfsobjekt ein Array aus, bei dem das erste Element des vorherigen Schritts entfernt und das nchste Element des ursprnglichen Iterators hinzugefgt wurde.
Iterator.prototype[Symbol.dispose]()Ruft die return()-Methode von this auf, sofern sie vorhanden ist. Dadurch wird das Disposable-Protokoll implementiert und eine Bereinigung ermglicht, wenn der Iterator mit using oder await using verwendet wird.
Iterator.prototype[Symbol.iterator]()Gibt das Iterator-Objekt selbst zurck. Dadurch sind Iterator-Objekte auch iterierbar.
Alle integrierten Iteratoren sind auch iterierbar. Sie knnen sie daher in einer for...of-Schleife verwenden:
const arrIterator = [1, 2, 3].values();
for (const value of arrIterator) {
console.log(value);
}
// Logs: 1, 2, 3
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-iterator-objects |
Iterator in core-jsIterator und zugehrige Hilfsmethodenfunction*IteratorObject/FunctionDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |