Signatur
Beschreibung
entries() gibt einen Array-Iterator zurück. Jeder Schritt liefert ein zweielementiges Array [index, wert]. So kommt man in einer for...of-Schleife gleichzeitig an Index und Wert, ohne einen eigenen Zähler zu führen.
Das ist praktisch, wenn der Index gebraucht wird, man aber trotzdem break, continue oder await einsetzen will. Mit forEach() geht das nicht. Mit Destrukturierung liest sich das kurz: for (const [i, wert] of arr.entries()).
Der Iterator ist lazy und live: Er erzeugt die Paare erst beim Durchlaufen und liest dabei den aktuellen Zustand des Arrays. Lücken in dünn besetzten Arrays (sparse arrays) werden nicht übersprungen, sondern als undefined geliefert. Die Methode ist generisch und funktioniert über Array.prototype.entries.call() auch mit array-ähnlichen Objekten, also Objekten mit length und numerischen Schlüsseln.
Rückgabewert
next() gibt { value: [index, element], done: false } zurück. Nach dem letzten Element folgt { value: undefined, done: true }.Beispiele
Index und Wert in for...of
const obst = ['Apfel', 'Birne', 'Kirsche'];
for (const [index, name] of obst.entries()) {
console.log(`${index + 1}. ${name}`);
}
Iterator manuell mit next() durchlaufen
const iterator = ['a', 'b'].entries();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
Erste ungültige Zeile finden und abbrechen
const zeilen = ['42', '17', 'abc', '8'];
for (const [zeile, wert] of zeilen.entries()) {
if (Number.isNaN(Number(wert))) {
console.log(`Fehler in Zeile ${zeile}: "${wert}"`);
break; // mit forEach nicht möglich
}
}
Sparse Arrays und array-ähnliche Objekte
// Lücken werden als undefined geliefert
console.log([...['x', , 'z'].entries()]);
// Generische Verwendung mit einem array-ähnlichen Objekt
const arrayLike = { length: 2, 0: 'rot', 1: 'grün' };
console.log([...Array.prototype.entries.call(arrayLike)]);
// Wichtig · Fallstricke
- Kein Array: Der Rückgabewert ist ein Iterator, kein Array.
.map()oder.lengthgibt es darauf nicht, undconsole.log(arr.entries())zeigt nurObject [Array Iterator] {}. Wer ein Array braucht, schreibt[...arr.entries()]oderArray.from(arr.entries()). Neuere Laufzeitumgebungen bieten dafür auch Iterator-Helfer wie.map()und.filter()direkt am Iterator (ES2025). - Nur einmal verwendbar: Ein durchlaufener Iterator ist erschöpft. Für einen zweiten Durchlauf
entries()erneut aufrufen. - Live-Verhalten: Wird das Array während des Durchlaufs verändert (z. B. mit
push), sieht der Iterator die Änderung. Das kann zu Endlosschleifen führen. - Unterschied zu
Object.entries():Object.entries(arr)liefert ein echtes Array mit String-Schlüsseln (['0', 'a']) und überspringt Lücken.arr.entries()liefert Zahlen-Indizes und schließt Lücken ein. - Kompatibilität: Wird von allen modernen Browsern und von Node.js ab Version 0.12 unterstützt, aber nicht vom Internet Explorer.