Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Iterator.prototype.flatMap()
Baseline 2025Newly available
Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
DieflatMap()-Methode vonIterator-Instanzen gibt ein neuesIterator-Helfer-Objekt zurück, das jedes Element im ursprünglichen Iterator nimmt, es durch eine Mapping-Funktion laufen lässt und die von der Mapping-Funktion zurückgegebenen Elemente (die in einem anderen Iterator oder Iterable enthalten sind) liefert.
In diesem Artikel
Syntax
flatMap(callbackFn)Parameter
callbackFnEine Funktion, die für jedes durch den Iterator produzierte Element ausgeführt wird. Sie sollte einen Iterator oder ein Iterable zurückgeben, das Elemente liefert, die von
flatMap()geliefert werden sollen. Beachten Sie, dass im Gegensatz zuArray.prototype.flatMap()keine einzelnen Nicht-Iterator/Iterable-Werte zurückgegeben werden können. Die Funktion wird mit den folgenden Argumenten aufgerufen:
Rückgabewert
Ein neuesIterator-Helfer-Objekt. Wenn zum ersten Mal dienext()-Methode des Iterator-Helfers aufgerufen wird, wirdcallbackFn auf das erste Element angewendet, das durch den zugrunde liegenden Iterator produziert wird, und der Rückgabewert, der ein Iterator oder Iterable sein sollte, wird einzeln vom Iterator-Helfer geliefert (wieyield*). Das nächste Element wird aus dem zugrunde liegenden Iterator abgerufen, wenn das vorherige voncallbackFn zurückgegebene Element abgeschlossen ist. Wenn der zugrunde liegende Iterator abgeschlossen ist, wird auch der Iterator-Helfer abgeschlossen (dienext()-Methode produziert{ value: undefined, done: true }).
Ausnahmen
TypeErrorWird ausgelöst, wenn
callbackFneinen Nicht-Iterator/Iterable-Wert oder einen String-Primitiv zurückgibt.
Beschreibung
flatMap akzeptiert zwei Arten von Rückgabewerten voncallbackFn: einen Iterator oder ein Iterable. Diese werden auf die gleiche Weise wie beiIterator.from() behandelt: Wenn der Rückgabewert iterable ist, wird die Methode[Symbol.iterator]() aufgerufen und der Rückgabewert verwendet; andernfalls wird der Rückgabewert als Iterator behandelt und dessennext()-Methode aufgerufen.
[1, 2, 3] .values() .flatMap((x) => { let itDone = false; const it = { next() { if (itDone) { return { value: undefined, done: true }; } itDone = true; return { value: x, done: false }; }, }; switch (x) { case 1: // An iterable that's not an iterator return { [Symbol.iterator]: () => it }; case 2: // An iterator that's not an iterable return it; case 3: // An iterable iterator is treated as an iterable return { ...it, [Symbol.iterator]() { console.log("Symbol.iterator called"); return it; }, }; default: return undefined; } }) .toArray();// Logs "Symbol.iterator called"// Returns [1, 2, 3]Beispiele
>Zusammenführen von Maps
Das folgende Beispiel führt zweiMap-Objekte zu einem zusammen:
const map1 = new Map([ ["a", 1], ["b", 2], ["c", 3],]);const map2 = new Map([ ["d", 4], ["e", 5], ["f", 6],]);const merged = new Map([map1, map2].values().flatMap((x) => x));console.log(merged.get("a")); // 1console.log(merged.get("e")); // 5Dies vermeidet die Erstellung temporärer Kopien des Inhalts der Map. Beachten Sie, dass das Array[map1, map2] zunächst in einen Iterator umgewandelt werden muss (mithilfe vonArray.prototype.values()), daArray.prototype.flatMap() nur Arrays, nicht aber Iterables, flacht.
new Map([map1, map2].flatMap((x) => x)); // Map(1) {undefined => undefined}Rückgabe von Zeichenfolgen
Strings sind iterierbar, aberflatMap() lehnt speziell String-Primitiven ab, die voncallbackFn zurückgegeben werden. Dies liegt daran, dass das Iterieren über Codepunkte oft nicht das gewünschte Verhalten ist.
[1, 2, 3] .values() .flatMap((x) => String(x)) .toArray(); // TypeError: Iterator.prototype.flatMap called on non-objectSie möchten es stattdessen möglicherweise in einem Array verpacken, sodass der gesamte String als ein einzelnes Element geliefert wird:
[1, 2, 3] .values() .flatMap((x) => [String(x)]) .toArray(); // ['1', '2', '3']Oder, wenn das Verhalten des Iterierens über Codepunkte beabsichtigt ist, können SieIterator.from() verwenden, um es in einen ordnungsgemäßen Iterator zu konvertieren:
[1, 2, 3] .values() .flatMap((x) => Iterator.from(String(x * 10))) .toArray();// ['1', '0', '2', '0', '3', '0']Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-iterator.prototype.flatmap> |