Iterator.prototype.filter()
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.
Die filter()
Methode von Iterator
Instanzen gibt ein neues Iterator-Helferobjekt zurück, das nur die Elemente des Iterators erzeugt, für die die bereitgestellte Callback-Funktion true
zurückgibt.
Syntax
filter(callbackFn)
Parameter
callbackFn
-
Eine Funktion, die für jedes vom Iterator erzeugte Element ausgeführt wird. Sie sollte einen truthy-Wert zurückgeben, damit das Element vom Iterator-Helfer erzeugt wird, und einen falsy-Wert andernfalls. Die Funktion wird mit den folgenden Argumenten aufgerufen:
Rückgabewert
Ein neues Iterator-Helferobjekt. Jedes Mal, wenn die next()
-Methode des Iterator-Helfers aufgerufen wird, gibt sie das nächste Element im Iterator zurück, für das die Callback-Funktion true
zurückgibt. Wenn der zugrundeliegende Iterator abgeschlossen ist, wird auch das Iterator-Helferobjekt abgeschlossen (die next()
-Methode liefert { value: undefined, done: true }
).
Beschreibung
Der Hauptvorteil von Iterator-Helfern gegenüber Array-Methoden ist, dass sie faul sind, was bedeutet, dass sie den nächsten Wert nur dann produzieren, wenn er angefordert wird. Dies vermeidet unnötige Berechnungen und erlaubt es ihnen auch, mit unendlichen Iteratoren verwendet zu werden.
Beispiele
Verwendung von filter()
Das folgende Beispiel erzeugt einen Iterator, der Terme in der Fibonacci-Sequenz erzeugt, und liest dann die ersten paar Terme, die gerade sind:
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const seq = fibonacci().filter((x) => x % 2 === 0);
console.log(seq.next().value); // 2
console.log(seq.next().value); // 8
console.log(seq.next().value); // 34
Verwendung von filter() mit einer for...of Schleife
filter()
ist am bequemsten, wenn Sie den Iterator nicht manuell kodieren. Da Iteratoren auch iterierbar sind, können Sie den zurückgegebenen Helfer mit einer for...of
Schleife durchlaufen:
for (const n of fibonacci().filter((x) => x % 2 === 0)) {
console.log(n);
if (n > 30) {
break;
}
}
// Logs:
// 2
// 8
// 34
Dies ist gleichbedeutend mit:
for (const n of fibonacci()) {
if (n % 2 !== 0) {
continue;
}
console.log(n);
if (n > 30) {
break;
}
}
Spezifikationen
Specification |
---|
Iterator Helpers # sec-iteratorprototype.filter |