Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die statische Methode Iterator.zip() erstellt ein neues Iterator-Objekt, das Elemente von mehreren iterierbaren Objekten aggregiert, indem es Arrays mit Elementen an derselben Position erzeugt. Sie „zippt“ im Wesentlichen die Eingabe-Iterables zusammen und ermöglicht die gleichzeitige Iteration über sie.
Die Iterator.zipKeyed()-Methode ist ähnlich, liefert jedoch Objekte statt Arrays mit benutzerdefinierten Schlüsseln.
Ein Iterable von Iterables, deren Elemente aggregiert werden. Es muss iterierbar sein und darf kein Iterator sein. Es sollte endlich sein, obwohl seine Elemente unendliche Iterables sein können. Jedes Element muss entweder das iterable-Protokoll oder andernfalls das iterator-Protokoll implementieren. Strings werden abgelehnt: Um Strings zu zippen, konvertieren Sie sie explizit in Iteratoren mit Iterator.from().
options OptionalEin Objekt, das das Verhalten bei inkonsistenten Eingabelängen spezifiziert. Es kann die folgenden Eigenschaften haben:
mode OptionalEine der folgenden Optionen:
Ein iterierbares Objekt (kein Iterator). Wird nur abgerufen und validiert, wenn mode "longest" ist. Wenn undefined oder nicht vorhanden, werden fehlende Werte aus kürzeren Iterables mit undefined gefüllt (was dem Übergeben eines leeren Iterables entspricht). Wenn ein Iterable bereitgestellt wird, wird es für die Anzahl der Elemente in iterables iteriert, sofort wenn Iterator.zip() aufgerufen wird. padding[i] wird für fehlende Werte für iterables[i] verwendet (angenommen, padding und iterables werden als Arrays übergeben; sie müssen es nicht sein). Wenn padding kürzer als iterables ist, wird undefined für die verbleibenden Iterables verwendet.
Ein neues Iterator-Objekt. Jedes seiner Elemente ist ein Array mit einer Länge, die der Anzahl der Eingabe-Iterables entspricht, und enthält die Elemente aus jedem Eingabe-Iterable an der entsprechenden Position. Wenn das iterables-Objekt leer ist, wird der resultierende Iterator als abgeschlossen erstellt.
Die Iterator.zip()-Funktion verhält sich wie eine Transponierung, indem sie Arrays erzeugt, die die Elemente an übereinstimmenden Positionen in jeder der Eingaben enthalten. Wenn wir Iterables als Arrays darstellen, kann die Eingabe folgendermaßen aussehen:
Der resultierende Iterator startet unabhängig von den Optionen mit der Ausgabe der folgenden Arrays:
Nachdem die ersten drei Arrays ausgegeben wurden, ist das Eingabe-Iterable b bei der vierten next()-Aufruf erschöpft — es gibt { done: true } zurück. Was als nächstes passiert, hängt von der mode-Option ab. Wenn mode "shortest" (Standard) ist, stoppt der resultierende Iterator hier: Die anderen beiden Eingabe-Iteratoren werden geschlossen. Wenn mode "strict" ist, wird ein Fehler geworfen, da die anderen beiden Iterables nicht fertig sind, wenn das zweite { done: true } zurückgibt. Wenn mode "longest" ist, setzt der resultierende Iterator das Erzeugen von Arrays fort und füllt fehlende Werte. Beispielsweise, wenn padding nicht bereitgestellt wird, ist der Standardwert undefined:
Wenn padding als Iterable bereitgestellt wird, da es drei Eingabe-Iterables gibt, werden die ersten drei Werte aus dem padding-Iterable verwendet, um fehlende Werte zu füllen. Angenommen, padding ist ein Array mit den Werten [p1, p2, p3]. Dann wird p2 verwendet, um den fehlenden Wert aus dem Eingabe-Iterable b zu füllen, und p1 wird verwendet, um den fehlenden Wert aus dem Eingabe-Iterable a zu füllen:
Wenn das padding-Iterable weniger als drei Werte enthält, werden die verbleibenden fehlenden Werte mit undefined gefüllt.
Mit Iterator.zip() können Sie über jedes iterierbare Objekt (Strings werden standardmäßig nicht unterstützt) iterieren und gleichzeitig Zugriff auf einen hochzählenden Zähler haben:
numbers ist ein unendlicher Iterator, der fortlaufende Zahlen ab 0 generiert. Da Iterator.zip() standardmäßig stoppt, wenn das kürzeste Eingabe-Iterable erschöpft ist, iteriert die Schleife genau dreimal. Der numbers-Iterator wird nach dem Ende der Schleife ordnungsgemäß geschlossen; er verursacht keine Endlosschleife.
Angenommen, Sie haben zwei Arrays: eines mit Schlüsseln und ein anderes mit Werten. Sie können Iterator.zip() verwenden, um sie zu einer Map zu kombinieren:
Angenommen, Sie haben Daten aus mehreren Quellen, wie Microservices oder Datenbanken. Sie wissen, dass jede Quelle verwandte Daten in derselben Reihenfolge bereitstellt, und Sie möchten sie gemeinsam verarbeiten. Sie können Iterator.zip() verwenden, um dies zu erreichen:
Beim Zippen von Iterables unterschiedlicher Länge mit auf "longest" gesetztem mode können Sie ein padding-Iterable bereitstellen, um die Werte zu spezifizieren, die verwendet werden, um fehlende Einträge zu füllen:
Strings werden als Eingabe-Iterables für Iterator.zip() nicht akzeptiert, da es jetzt als Fehler betrachtet wird, Zeichenfolgen implizit iterierbar zu machen. Um Strings zu zippen, konvertieren Sie sie explizit in Iteratoren mit Iterator.from():
In einigen Fällen möchten Sie möglicherweise nach Graphem-Cluster statt nach Code-Einheiten aufteilen. In diesem Fall können Sie die Intl.Segmenter-API verwenden:
| Joint Iteration # sec-IteratorZip |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.