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 Elemente des Iterators liefert, die jeweils durch eine Abbildungsfunktion transformiert werden.
Syntax
map(callbackFn)
Parameter
callbackFn
-
Eine Funktion, die für jedes vom Iterator erzeugte Element ausgeführt wird. Der Rückgabewert wird vom Iterator-Hilfsobjekt bereitgestellt. 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 sie das nächste Element vom zugrunde liegenden Iterator, wendet callbackFn
an und liefert den Rückgabewert. 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 besteht darin, dass sie faul sind, was bedeutet, dass sie den nächsten Wert nur dann erzeugen, wenn er angefordert wird. Dies vermeidet unnötige Berechnungen und ermöglicht es ihnen, mit unendlichen Iteratoren verwendet zu werden. Die map()
-Methode erlaubt es Ihnen, einen neuen Iterator zu erstellen, der beim Durchlaufen transformierte Elemente erzeugt.
Beispiele
Verwendung von map()
Im folgenden Beispiel wird ein Iterator erstellt, der Glieder der Fibonacci-Folge liefert, diese in eine neue Folge transformiert, bei der jedes Glied quadriert wird, und dann die ersten paar Glieder liest:
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 erstellen. Da Iteratoren auch iterierbar sind, können Sie den zurückgegebenen Helfer mit einer for...of
-Schleife durchlaufen:
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