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 ein neues Iterator-Hilfsobjekt zurück, das die Elemente des Iterators ausgibt, wobei jedes durch eine Mapping-Funktion transformiert wird.
Syntax
map(callbackFn)
Parameter
callbackFn
-
Eine Funktion, die für jedes vom Iterator erzeugte Element ausgeführt wird. Ihr Rückgabewert wird vom Iterator-Hilfsobjekt ausgegeben. Die Funktion wird mit den folgenden Argumenten aufgerufen:
Rückgabewert
Ein neues Iterator-Hilfsobjekt. Jedes Mal, wenn die next()
-Methode des Iterator-Hilfsobjekts aufgerufen wird, erhält es das nächste Element vom zugrunde liegenden Iterator, wendet callbackFn
an und gibt den Rückgabewert aus. Wenn der zugrunde liegende Iterator abgeschlossen ist, ist auch das Iterator-Hilfsobjekt abgeschlossen (die next()
-Methode erzeugt { value: undefined, done: true }
).
Beschreibung
Der Hauptvorteil von Iterator-Hilfsobjekten gegenüber Array-Methoden ist, dass sie lazy sind, was bedeutet, dass sie den nächsten Wert nur bei Bedarf erzeugen. Dies vermeidet unnötige Berechnungen und ermöglicht auch die Verwendung mit unendlichen Iteratoren. Die map()
-Methode ermöglicht es Ihnen, einen neuen Iterator zu erstellen, der bei der Iteration transformierte Elemente erzeugt.
Beispiele
Verwendung von map()
Das folgende Beispiel erstellt einen Iterator, der Terme der Fibonacci-Folge erzeugt, verwandelt ihn in eine neue Folge, bei der 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 nicht den Iterator selbst 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