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

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

element

Das aktuelle bearbeitete Element.

index

Der Index des aktuellen bearbeiteten Elements.

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:

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 kodieren. 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
Iterator Helpers
# sec-iteratorprototype.filter

Browser-Kompatibilität

Siehe auch