Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. Iterator
  6. flatMap()

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

Iterator.prototype.flatMap()

Baseline 2025
Newly 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.

Syntax

js
flatMap(callbackFn)

Parameter

callbackFn

Eine 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 vonflatMap() 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:

element

Das aktuelle Element, das im Array verarbeitet wird.

index

Der Index des aktuellen Elements, das im Array verarbeitet wird.

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

TypeError

Wird ausgelöst, wenncallbackFn einen 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.

js
[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:

js
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")); // 5

Dies 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.

js
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.

js
[1, 2, 3]  .values()  .flatMap((x) => String(x))  .toArray(); // TypeError: Iterator.prototype.flatMap called on non-object

Sie möchten es stattdessen möglicherweise in einem Array verpacken, sodass der gesamte String als ein einzelnes Element geliefert wird:

js
[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:

js
[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

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp