Iterator.prototype.map()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die map()
-Methode von Iterator
-Instanzen gibt einen neuen Iterator-Helfer zurück, der Elemente des Iterators liefert, die jeweils durch eine Mapping-Funktion transformiert wurden.
Syntax
map(callbackFn)
Parameter
callbackFn
-
Eine Funktion, die für jedes vom Iterator erzeugte Element ausgeführt werden soll. Der Rückgabewert wird vom Iterator-Helfer geliefert. Die Funktion wird mit den folgenden Argumenten aufgerufen:
Rückgabewert
Ein neuer Iterator-Helfer. Jedes Mal, wenn die next()
-Methode des Iterator-Helfers aufgerufen wird, erhält sie das nächste Element vom zugrunde liegenden Iterator, wendet callbackFn
an und liefert den Rückgabewert. Wenn der zugrunde liegende Iterator abgeschlossen ist, wird auch der Iterator-Helfer abgeschlossen (die next()
-Methode liefert { value: undefined, done: true }
).
Beschreibung
Der Hauptvorteil von Iterator-Helfern gegenüber Array-Methoden ist ihre Fähigkeit, mit unendlichen Iteratoren zu arbeiten. Bei unendlichen Iteratoren ermöglicht map()
, einen neuen Iterator zu erstellen, der bei der Iteration transformierte Elemente produziert.
Beispiele
Verwendung von map()
Das folgende Beispiel erstellt einen Iterator, der Terme in der Fibonacci-Folge liefert, wandelt ihn in eine neue Folge um, wobei jeder Term quadriert wird, und liest dann die ersten paar Terme:
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const seq = fibonacci().map((x) => x ** 2);
console.log(seq.next().value); // 1
console.log(seq.next().value); // 1
console.log(seq.next().value); // 4
Verwendung von map() mit einer for...of-Schleife
map()
ist am bequemsten, wenn Sie den Iterator nicht manuell schreiben. Da Iteratoren auch iterierbar sind, können Sie den zurückgegebenen Helfer mit einer for...of
-Schleife iterieren:
for (const n of fibonacci().map((x) => x ** 2)) {
console.log(n);
if (n > 30) {
break;
}
}
// Logs:
// 1
// 1
// 4
// 9
// 25
// 64
Dies entspricht:
for (const n of fibonacci()) {
const n2 = n ** 2;
console.log(n2);
if (n2 > 30) {
break;
}
}
Spezifikationen
Specification |
---|
Iterator Helpers # sec-iteratorprototype.map |
Browser-Kompatibilität
BCD tables only load in the browser