Iterator.prototype.filter()

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.

Die Methode filter() von Iterator Instanzen gibt ein neues Iterator-Helferobjekt zurück, das nur die Elemente des Iterators liefert, für die die bereitgestellte Callback-Funktion true zurückgibt.

Syntax

js
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 angegeben wird, und einen falsy Wert sonst. Die Funktion wird mit den folgenden Argumenten aufgerufen:

element

Das aktuelle Element, das verarbeitet wird.

index

Der Index des aktuellen Elements, das verarbeitet wird.

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 zugrunde liegende Iterator abgeschlossen ist, wird auch das Iterator-Helferobjekt abgeschlossen (die next()-Methode erzeugt { value: undefined, done: true }).

Beschreibung

Der Hauptvorteil von Iterator-Helfern 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.

Beispiele

Verwendung von filter()

Im folgenden Beispiel wird ein Iterator erstellt, der Terme der Fibonacci-Folge liefert, und liest dann die ersten wenigen Terme, die gerade sind:

js
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 erstellen. Da Iteratoren auch iterierbar sind, können Sie den zurückgegebenen Helfer mit einer for...of Schleife durchlaufen:

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

js
for (const n of fibonacci()) {
  if (n % 2 !== 0) {
    continue;
  }
  console.log(n);
  if (n > 30) {
    break;
  }
}

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-iterator.prototype.filter

Browser-Kompatibilität

Siehe auch