Signatur
Beschreibung
Die Methode toArray() gehört zu den Iterator-Helfern. Sie ruft so lange next() auf dem Iterator auf, bis dieser done: true meldet, und sammelt dabei jeden Wert in einem neuen Array. Danach ist der Iterator verbraucht.
Gedacht ist sie vor allem als Abschluss einer Kette aus fauler Verarbeitung (map(), filter(), take(), drop(), flatMap()). Die Zwischenschritte erzeugen keine Arrays. Erst toArray() wertet die Kette aus und liefert das Ergebnis als normales Array, auf dem du dann Array-Methoden wie sort(), at() oder length nutzen kannst.
Das Ergebnis entspricht [...iterator] oder Array.from(iterator). Der Unterschied: toArray() steht direkt als Methode am Ende einer Kette und liest sich dadurch flüssiger. Für Objekte, die nur iterierbar sind, aber nicht von Iterator.prototype erben, gibt es diese Methode nicht. Solche Objekte wandelst du vorher mit Iterator.from() um.
Rückgabewert
Array mit allen Werten, die der Iterator geliefert hat, in der Reihenfolge ihrer Ausgabe. Bei einem leeren oder bereits verbrauchten Iterator ist es ein leeres Array [].Beispiele
Generator vollständig in ein Array umwandeln
function* zaehleBis(n) {
for (let i = 1; i <= n; i++) yield i;
}
const zahlen = zaehleBis(5).toArray();
console.log(zahlen);
console.log(Array.isArray(zahlen));
Faule Kette aus Iterator-Helfern auswerten
function* natuerlicheZahlen() {
let n = 1;
while (true) yield n++; // unendlicher Generator
}
const ersteGeradeQuadrate = natuerlicheZahlen()
.filter((n) => n % 2 === 0)
.map((n) => n * n)
.take(4) // begrenzt die Menge, sonst liefe toArray() endlos
.toArray();
console.log(ersteGeradeQuadrate);
Map-Einträge filtern und als Array weiterverarbeiten
const lager = new Map([
['Äpfel', 12],
['Birnen', 0],
['Kirschen', 7],
['Pflaumen', 0]
]);
const verfuegbar = lager.entries()
.filter(([, menge]) => menge > 0)
.map(([name]) => name)
.toArray()
.sort();
console.log(verfuegbar);
Iterator ist nach toArray() verbraucht
const it = ['a', 'b', 'c'].values();
console.log(it.toArray());
console.log(it.toArray()); // zweiter Aufruf: nichts mehr übrig
// Wichtig · Fallstricke
- Unendliche Iteratoren:
toArray()liest immer bis zum Ende. Bei einem unendlichen Generator kehrt der Aufruf nie zurück, bis irgendwann der Speicher voll ist. Begrenze die Menge deshalb vorher mittake(n). - Einmalig: Der Iterator ist danach verbraucht. Ein zweiter Aufruf gibt
[]zurück. - Nur für echte Iteratoren: Die Methode ist nur vorhanden, wenn das Objekt von
Iterator.prototypeerbt. Das trifft auf eingebaute Iteratoren und Generatoren zu. Ein Array selbst hat keintoArray(). Für eigene oder fremde Iteratoren nutzt duIterator.from(obj).toArray(). - Keine asynchrone Variante: Asynchrone Iteratoren und Async-Generatoren werden nicht unterstützt. Dafür gibt es
Array.fromAsync(). - Fehler: Wirft
next()einen Fehler, wird er weitergereicht, und du bekommst kein Teilergebnis. - Kompatibilität: Die Methode ist relativ neu (Iterator Helpers, ES2025). Für ältere Browser oder ältere Node.js-Versionen brauchst du ein Polyfill, z. B. aus core-js, oder du greifst auf
Array.from(iterator)zurück.