| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Iterator/zip | [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 nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
Die statische Methode Iterator.zip() erstellt ein neues Iterator-Objekt, das Elemente aus mehreren iterierbaren Objekten zusammenfasst, indem es Arrays mit den Elementen an derselben Position liefert. Sie fhrt die Eingabe-Iterables damit gewissermaen wie mit einem Reiverschluss zusammen und ermglicht es, sie gleichzeitig zu durchlaufen.
Die Methode Iterator.zipKeyed() ist hnlich, liefert aber statt Arrays Objekte mit Schlsseln, die Sie angeben knnen.
Iterator.zip(iterables)
Iterator.zip(iterables, options)
iterablesEin Iterable aus Iterables, deren Elemente zusammengefasst werden. Es muss iterierbar sein und darf kein Iterator sein. Es sollte endlich sein, seine Elemente drfen jedoch unendliche Iterables sein. Jedes Element muss entweder das Iterable-Protokoll oder, falls nicht, das Iterator-Protokoll implementieren. Strings werden abgelehnt: Um Strings zusammenzufhren, konvertieren Sie sie mit Iterator.from() ausdrcklich in Iteratoren.
options OptionalEin Objekt, das das Verhalten bei unterschiedlichen Eingabelngen festlegt. Es kann die folgenden Eigenschaften haben:
mode OptionalEiner der folgenden Werte:
"shortest" (Standard): Der resultierende Iterator endet, sobald ein Eingabe-Iterable erschpft ist."longest": Der resultierende Iterator endet, sobald alle Eingabe-Iterables erschpft sind. Fehlende Werte krzerer Iterables werden gem der Option padding aufgefllt."strict": Ein TypeError wird ausgelst, wenn nicht alle Eingabe-Iterables gleichzeitig enden.padding OptionalEin iterierbares Objekt (kein Iterator). Wird nur abgerufen und validiert, wenn mode den Wert "longest" hat. Ist der Wert undefined oder fehlt er, werden fehlende Werte krzerer Iterables mit undefined aufgefllt (was der bergabe eines leeren Iterables entspricht). Wird ein Iterable angegeben, werden daraus unmittelbar beim Aufruf von Iterator.zip() so viele Werte entnommen, wie iterables Elemente enthlt. padding[i] wird fr fehlende Werte von iterables[i] verwendet (unter der Annahme, dass padding und iterables als Arrays angegeben werden; das ist nicht erforderlich). Ist padding krzer als iterables, wird fr die brigen Iterables undefined verwendet.
Ein neues Iterator-Objekt. Jedes seiner Elemente ist ein Array, dessen Lnge der Anzahl der Eingabe-Iterables entspricht und das die Elemente aus den einzelnen Eingabe-Iterables an der jeweiligen Position enthlt. Ist das Objekt iterables leer, wird der resultierende Iterator im abgeschlossenen Zustand erstellt.
Die Funktion Iterator.zip() verhlt sich wie eine Transposition: Sie liefert Arrays mit den Elementen an bereinstimmenden Positionen der Eingaben. Wenn wir die Iterables als Arrays darstellen, knnte die Eingabe so aussehen:
[
[a1, a2, a3, a4], // Iterable a
[b1, b2, b3], // Iterable b
[c1, c2, c3, c4, c5], // Iterable c
];
Der resultierende Iterator beginnt unabhngig von den Optionen damit, die folgenden Arrays zu liefern:
[a1, b1, c1];
[a2, b2, c2];
[a3, b3, c3];
Nachdem die ersten drei Arrays geliefert wurden, ist das Eingabe-Iterable b beim vierten Aufruf von next() erschpft es gibt { done: true } zurck. Was danach geschieht, hngt von der Option mode ab. Ist mode auf "shortest" gesetzt (der Standardwert), endet der resultierende Iterator an dieser Stelle: Die beiden anderen Eingabe-Iteratoren werden geschlossen. Ist mode auf "strict" gesetzt, wird ein Fehler ausgelst, weil die beiden anderen Iterables noch nicht beendet sind, wenn das zweite { done: true } liefert. Ist mode auf "longest" gesetzt, liefert der resultierende Iterator weitere Arrays und fllt fehlende Werte auf. Wenn beispielsweise padding nicht angegeben wird, wird standardmig undefined verwendet:
[a4, undefined, c4];
[undefined, undefined, c5];
Wenn padding als Iterable angegeben wird, werden dessen erste drei Werte zum Auffllen fehlender Werte verwendet, da es drei Eingabe-Iterables gibt. Nehmen wir an, padding ist ein Array mit den Werten [p1, p2, p3]. Dann wird p2 verwendet, um den fehlenden Wert des Eingabe-Iterables b aufzufllen, und p1 fr den fehlenden Wert des Eingabe-Iterables a:
[a4, p2, c4];
[p1, p2, c5];
Hat das Iterable padding weniger als drei Werte, werden die brigen fehlenden Werte mit undefined aufgefllt.
Mit Iterator.zip() knnen Sie jedes iterierbare Objekt durchlaufen (Strings werden standardmig nicht untersttzt) und dabei zugleich auf einen hochzhlenden Zhler zugreifen:
const ages = new Map([
["Caroline", 30],
["Danielle", 25],
["Evelyn", 35],
]);
const numbers = (function* () {
let n = 0;
while (true) {
yield n++;
}
})();
for (const [index, [name, age]] of Iterator.zip([numbers, ages])) {
console.log(`${index}: ${name} is ${age} years old.`);
}
// Output:
// 0: Caroline is 30 years old.
// 1: Danielle is 25 years old.
// 2: Evelyn is 35 years old.
numbers ist ein unendlicher Iterator, der aufsteigende Zahlen ab 0 erzeugt. Da Iterator.zip() standardmig endet, sobald das krzeste Eingabe-Iterable erschpft ist, wird die Schleife genau dreimal durchlaufen. Der Iterator numbers wird nach Ende der Schleife ordnungsgem geschlossen; er verursacht keine Endlosschleife.
Angenommen, Sie haben zwei Arrays: eines mit Schlsseln und eines mit Werten. Mit Iterator.zip() knnen Sie diese zu einer Map zusammenfgen:
const days = ["Mon", "Tue", "Wed", "Thu", "Fri"];
const temperatures = [22, 21, 23, 20, 19];
const dayTemperatureMap = new Map(Iterator.zip([days, temperatures]));
console.log(dayTemperatureMap);
// Map(5) { 'Mon' => 22, 'Tue' => 21, 'Wed' => 23, 'Thu' => 20, 'Fri' => 19 }
Angenommen, Sie erhalten Daten aus mehreren Quellen, etwa aus verschiedenen Microservices oder Datenbanken. Sie wissen, dass jede Quelle zusammengehrige Daten in derselben Reihenfolge liefert, und mchten diese gemeinsam verarbeiten. Dazu knnen Sie Iterator.zip() verwenden:
const names = fetchNames(); // e.g., ["Caroline", "Danielle", "Evelyn"]
const ages = fetchAges(); // e.g., [30, 25, 35]
const cities = fetchCities(); // e.g., ["New York", "London", "Hong Kong"]
for (const [name, age, city] of Iterator.zip([names, ages, cities])) {
console.log(`${name}, aged ${age}, lives in ${city}.`);
}
// Output:
// Caroline, aged 30, lives in New York.
// Danielle, aged 25, lives in London.
// Evelyn, aged 35, lives in Hong Kong.
Wenn Sie Iterables unterschiedlicher Lnge zusammenfhren und mode auf "longest" gesetzt ist, knnen Sie mit einem Iterable fr padding festlegen, welche Werte fr fehlende Eintrge verwendet werden:
const letters = ["a", "b", "c", "d", "e"];
const numbers = [1, 2, 3];
// One padding value per iterable
const padding = ["[Letter missing]", "[Number missing]"];
const it = Iterator.zip([letters, numbers], { mode: "longest", padding });
for (const [letter, number] of it) {
console.log(`${letter}: ${number}`);
}
// Output:
// a: 1
// b: 2
// c: 3
// d: [Number missing]
// e: [Number missing]
Strings werden von Iterator.zip() nicht als Eingabe-Iterables akzeptiert, da es inzwischen als Fehler angesehen wird, Strings implizit als Iterables zu behandeln. Um Strings zusammenzufhren, konvertieren Sie sie mit Iterator.from() ausdrcklich in Iteratoren:
const str1 = "abc";
const str2 = "1234";
const it = Iterator.zip([Iterator.from(str1), Iterator.from(str2)]);
for (const [char1, char2] of it) {
console.log(`${char1} - ${char2}`);
}
// Output:
// a - 1
// b - 2
// c - 3
In manchen Fllen mchten Sie mglicherweise nach Graphemclustern statt nach Codeeinheiten aufteilen. Dafr knnen Sie die API Intl.Segmenter verwenden:
const segmenter = new Intl.Segmenter("en-US", { granularity: "grapheme" });
const str1 = "";
const str2 = "123";
const it = Iterator.zip([
segmenter.segment(str1).map(({ segment }) => segment),
segmenter.segment(str2).map(({ segment }) => segment),
]);
for (const [char1, char2] of it) {
console.log(`${char1} - ${char2}`);
}
// Output:
// - 1
// - 2
// - 3
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-iterator.zip |
Iterator.zip in core-jsIterator.zip von es-shimsIteratorIterator.zipKeyed()Iterator.from()Iterator.concat()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 |