Start · Sprachen · JavaScript · Referenz · Iterator.prototype.every()

Iterator.prototype.every()

Methode

Prüft, ob alle vom Iterator gelieferten Elemente die Testfunktion erfüllen, und gibt <code>true</code> oder <code>false</code> zurück. Bricht beim ersten Fehlschlag ab.

seit JavaScript ES2025 (Iterator Helpers); Baseline 2025: Chrome 1 Kategorie: method-property

Signatur

Iterator.prototype.every(callbackFn)

Beschreibung

every() gehört zu den Iterator Helpers und funktioniert wie Array.prototype.every(), nur direkt auf einem Iterator. Die Methode ruft callbackFn nacheinander für jedes Element auf. Liefert der Callback einen falsy-Wert, gibt every() sofort false zurück und schließt den Iterator über seine return()-Methode. Wird der Iterator vollständig durchlaufen, ohne dass ein Test fehlschlägt, ist das Ergebnis true.

Das ist vor allem bei Generatoren, sehr großen oder unendlichen Datenquellen nützlich, etwa bei Map.prototype.values(), Set-Iteratoren oder eigenen Generatorfunktionen. Du musst die Daten nicht erst mit Array.from() oder Spread-Syntax in ein Array kopieren, und die Auswertung hört auf, sobald das Ergebnis feststeht.

every() ist eine verbrauchende Methode: Sie liest Elemente aus dem Iterator und gibt keinen neuen Iterator zurück, sondern einen Wahrheitswert. Danach ist der Iterator ganz oder teilweise aufgebraucht und lässt sich nicht noch einmal durchlaufen.

Parameter

Name Typ Default Beschreibung
$callbackFn Pflicht (element: any, index: number) => any Testfunktion, die für jedes Element aufgerufen wird. Ein truthy-Rückgabewert heißt, dass das Element den Test besteht. Ein falsy-Rückgabewert beendet die Prüfung. Die Funktion erhält element (das aktuelle Element) und index (die bei 0 beginnende Position). Anders als bei Arrays gibt es kein drittes Argument und keinen thisArg-Parameter.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn callbackFn für alle Elemente einen truthy-Wert liefert, sonst false. Bei einem leeren Iterator ist das Ergebnis immer true.

Beispiele

Einfacher Fall: Werte eines Generators prüfen

function* zahlen() {
  yield 2;
  yield 4;
  yield 6;
}

console.log(zahlen().every((n) => n % 2 === 0));
console.log(zahlen().every((n) => n > 3));
true false

Map-Werte prüfen, ohne ein Array anzulegen

const lagerbestand = new Map([
  ['Schrauben', 120],
  ['Muttern', 80],
  ['Dübel', 0]
]);

const allesVorraetig = lagerbestand.values().every((menge) => menge > 0);
console.log(allesVorraetig ? 'Alles vorrätig' : 'Nachbestellen!');
Nachbestellen!

Abbruch bei unendlichem Iterator

function* natuerlicheZahlen() {
  let n = 0;
  try {
    while (true) yield n++;
  } finally {
    console.log('Iterator geschlossen');
  }
}

// Bricht beim ersten Element ab, das den Test nicht besteht (hier 10)
const ergebnis = natuerlicheZahlen().every((n, i) => n < 10);
console.log(ergebnis);
Iterator geschlossen false

Iterable ohne Helper-Methoden mit Iterator.from() umwandeln

// Eigenes Iterator-Objekt, das nicht von Iterator.prototype erbt
const altIterator = {
  i: 0,
  next() {
    return this.i < 3 ? { value: this.i++, done: false } : { value: undefined, done: true };
  }
};

const alleKlein = Iterator.from(altIterator).every((x) => x < 5);
console.log(alleKlein);
true

// Wichtig · Fallstricke

  • Leerer Iterator: Das Ergebnis ist immer true (leere Wahrheit), genau wie bei [].every().
  • Unendliche Iteratoren: Wenn jedes Element den Test besteht, endet every() nie. Grenze die Menge vorher mit .take(n) ein.
  • Verbrauch: Danach ist der Iterator aufgebraucht oder geschlossen. Ein zweiter Aufruf auf demselben Iterator sieht die schon gelesenen Elemente nicht mehr.
  • Kein Array-Iterator nötig, aber Vererbung schon: Nur Objekte, die von Iterator.prototype erben, haben diese Methode. Das sind z. B. eingebaute Iteratoren und Generatoren. Arrays selbst sind nur Iterables, deshalb brauchst du arr.values().every(...) oder einfach arr.every(...). Eigene Iteratoren lassen sich mit Iterator.from() einbinden.
  • Keine Unterstützung für asynchrone Iteratoren: Für AsyncIterator gibt es bisher keine Helper-Methoden, die kommen erst mit einem späteren Proposal.
  • Ist callbackFn keine Funktion, wird ein TypeError geworfen und der Iterator geschlossen. Wirft der Callback selbst einen Fehler, wird der Iterator ebenfalls geschlossen und der Fehler weitergereicht.
  • Kompatibilität: Die Methode ist relativ neu (Chrome/Edge 122, Firefox 131, Safari 18.4, Node.js 22). Für ältere Umgebungen gibt es ein Polyfill, z. B. core-js.