Signatur
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
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));
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!');
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);
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);
// 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.prototypeerben, haben diese Methode. Das sind z. B. eingebaute Iteratoren und Generatoren. Arrays selbst sind nur Iterables, deshalb brauchst duarr.values().every(...)oder einfacharr.every(...). Eigene Iteratoren lassen sich mitIterator.from()einbinden. - Keine Unterstützung für asynchrone Iteratoren: Für
AsyncIteratorgibt es bisher keine Helper-Methoden, die kommen erst mit einem späteren Proposal. - Ist
callbackFnkeine Funktion, wird einTypeErrorgeworfen 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.