Iterator.zipKeyed()
Eingeschränkt verfügbar
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.zipKeyed() erstellt ein neues Iterator-Objekt, das Elemente aus mehreren iterierbaren Objekten zusammenfasst. Dazu liefert sie Objekte, deren Elemente jeweils an derselben Position stehen und deren Schlüssel durch die Eingabe festgelegt werden. Sie „verzahnt“ die iterierbaren Eingaben und ermöglicht so, sie gleichzeitig zu durchlaufen.
Die Methode Iterator.zip() funktioniert ähnlich, liefert jedoch Arrays statt Objekten.
Syntax
Iterator.zipKeyed(iterables)
Iterator.zipKeyed(iterables, options)
Parameter
iterables-
Ein Objekt. Der Schlüssel jeder Eigenschaft wird als Schlüssel in den resultierenden Objekten verwendet. Der Wert der Eigenschaft muss entweder das Iterable-Protokoll oder, falls dies nicht der Fall ist, das Iterator-Protokoll implementieren. Diese iterierbaren Objekte können unendlich sein. Strings werden nicht akzeptiert: Um Strings zu verzahnen, wandeln Sie sie mit
Iterator.from()ausdrücklich in Iteratoren um. optionsOptional-
Ein Objekt, das das Verhalten bei unterschiedlich langen Eingaben festlegt. Es kann die folgenden Eigenschaften haben:
modeOptional-
Einer der folgenden Werte:
"shortest"(Standardwert): Der resultierende Iterator endet, sobald eine iterierbare Eingabe erschöpft ist."longest": Der resultierende Iterator endet, sobald alle iterierbaren Eingaben erschöpft sind. Fehlende Werte aus kürzeren iterierbaren Eingaben werden entsprechend der Optionpaddingergänzt."strict": EinTypeErrorwird ausgelöst, wenn nicht alle iterierbaren Eingaben gleichzeitig enden.
paddingOptional-
Ein Objekt. Es wird nur abgerufen und validiert, wenn
modeden Wert"longest"hat. Ist esundefinedoder nicht vorhanden, werden fehlende Werte aus kürzeren iterierbaren Eingaben mitundefinedergänzt (dies entspricht der Übergabe eines leeren Objekts). Wird ein Objekt angegeben, wird jeder Schlüssel des Argumentsiterablesabgerufen, sobaldIterator.zipKeyed()aufgerufen wird.padding[key]wird für fehlende Werte voniterables[key]verwendet. Fehlen impadding-Objekt einige Schlüssel, werden die entsprechenden Werte mitundefinedergänzt.
Rückgabewert
Ein neues Iterator-Objekt. Jedes seiner Elemente ist ein Objekt mit denselben Schlüsseln wie das Argument iterables und enthält die Elemente der einzelnen iterierbaren Eingaben an der entsprechenden Position.
Beschreibung
Die Funktion Iterator.zipKeyed() verhält sich wie Iterator.zip(). Der einzige Unterschied besteht darin, dass Sie die Schlüssel der resultierenden Objekte festlegen können, während Iterator.zip() immer numerische Indizes verwendet (indem es Arrays liefert).
Wenn wir iterierbare Objekte als Arrays darstellen, kann die Eingabe so aussehen:
({
a: [a1, a2, a3, a4],
b: [b1, b2, b3],
c: [c1, c2, c3, c4, c5],
});
Unabhängig von den Optionen liefert der resultierende Iterator zunächst die folgenden Arrays:
({ a: a1, b: b1, c: c1 });
({ a: a2, b: b2, c: c2 });
({ a: a3, b: b3, c: c3 });
Nachdem die ersten drei Objekte geliefert wurden, ist die iterierbare Eingabe b beim vierten Aufruf von next() erschöpft – sie gibt { done: true } zurück. Was danach geschieht, hängt 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 ausgelöst, weil die beiden anderen iterierbaren Eingaben noch nicht beendet sind, wenn die zweite das Ergebnis { done: true } liefert. Ist mode auf "longest" gesetzt, liefert der resultierende Iterator weitere Objekte und ergänzt fehlende Werte. Wenn beispielsweise padding nicht angegeben wird, wird standardmäßig undefined verwendet:
({ a: a4, b: undefined, c: c4 });
({ a: undefined, b: undefined, c: c5 });
Wird padding als Objekt angegeben, kann es beispielsweise so aussehen: { a: p1, b: p2, c: p3 }. Dann wird p2 verwendet, um den fehlenden Wert der iterierbaren Eingabe b zu ergänzen, und p1, um den fehlenden Wert der iterierbaren Eingabe a zu ergänzen:
({ a: a4, b: p2, c: c4 });
({ a: p1, b: p2, c: c5 });
Beispiele
>Tabellarische Daten transponieren
Es gibt zwei gängige Möglichkeiten, tabellarische Daten darzustellen: als Objekt, bei dem jede Eigenschaft eine Spalte ist, oder als Array von Objekten, bei dem jedes Objekt eine Zeile ist. Dieses Beispiel zeigt, wie Sie mit Iterator.zipKeyed() zeilenweise über die spaltenbasierte Darstellung iterieren können.
const table = {
name: ["Caroline", "Danielle", "Evelyn"],
age: [30, 25, 35],
city: ["New York", "London", "Hong Kong"],
};
for (const { name, age, city } of Iterator.zipKeyed(table)) {
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.
Die meisten Anwendungsfälle von Iterator.zipKeyed() sind mit denen von Iterator.zip() identisch. Welche Methode Sie verwenden, hängt davon ab, ob Ihre iterierbaren Eingaben bereits als Objekt (verwenden Sie zipKeyed()) oder als Array (verwenden Sie zip()) vorliegen. Wir empfehlen, nach Möglichkeit zipKeyed() zu verwenden, da explizite Schlüssel es erschweren, die Reihenfolge der iterierbaren Eingaben versehentlich zu verwechseln.
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-iterator.zipkeyed> |