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

Iterator.prototype.join()

Methode

Verbindet alle von einem Iterator erzeugten Werte zu einem String, getrennt durch Kommas oder einen angegebenen Trenner – analog zu <code>Array.prototype.join()</code>.

seit JavaScript Experimentell (TC39-Vorschlag, noch nicht Teil von Kategorie: method-property

Signatur

Iterator.prototype.join(separator)

Beschreibung

Iterator.prototype.join() durchläuft einen Iterator bis zum Ende, wandelt jeden erzeugten Wert in einen String um und verbindet alle zu einem einzigen String. Zwischen den Werten steht der angegebene separator, ohne Angabe ein Komma (","). Die Methode verhält sich also wie Array.prototype.join(), du musst den Iterator aber nicht erst mit Array.from() oder dem Spread-Operator in ein Array umwandeln.

Besonders praktisch ist das am Ende einer Kette von Iterator-Helfern wie map(), filter() oder take(). Die Werte werden verzögert (lazy) verarbeitet und erst beim join() tatsächlich erzeugt. Dadurch entsteht kein Zwischen-Array, was bei Generatoren oder großen Datenmengen Speicher spart.

Beachte: join() ist eine verbrauchende Methode. Der Iterator läuft dabei bis zum Ende durch und liefert danach keine Werte mehr. Einen unendlichen Iterator musst du vorher mit take() begrenzen, sonst endet der Aufruf nie.

Parameter

Name Typ Default Beschreibung
$separator string "," String, der zwischen zwei Werte gesetzt wird. Ohne Angabe (oder bei undefined) wird ein Komma verwendet. Ein leerer String "" verbindet die Werte ohne Trenner.

Rückgabewert

Typ
string
Beschreibung
Ein String aus allen erzeugten Werten, jeweils getrennt durch separator. Liefert der Iterator keine Werte, ist das Ergebnis ein leerer String "".

Beispiele

Generator-Werte verbinden (mit Fallback)

function* farben() {
  yield 'rot';
  yield 'grün';
  yield 'blau';
}

// Funktionsprüfung: native Methode oder Fallback über Array.from()
const joinIter = (it, sep) =>
  typeof it.join === 'function' ? it.join(sep) : Array.from(it).join(sep);

console.log(joinIter(farben()));
console.log(joinIter(farben(), ' | '));
rot,grün,blau rot | grün | blau

Iterator-Helfer verketten, ohne Zwischen-Array

const preise = new Map([
  ['Kaffee', 2.5],
  ['Tee', 1.8],
  ['Kakao', 3.2]
]);

const it = preise.entries()
  .filter(([, preis]) => preis > 2)
  .map(([name, preis]) => `${name}: ${preis.toFixed(2)} €`);

const text = typeof it.join === 'function'
  ? it.join('\n')
  : Array.from(it).join('\n');

console.log(text);
Kaffee: 2.50 € Kakao: 3.20 €

Unendlichen Iterator begrenzen und Verbrauch beachten

function* zaehler() {
  let n = 1;
  while (true) yield n++;
}

const ersteFuenf = zaehler().take(5);
const join = (it, sep) =>
  typeof it.join === 'function' ? it.join(sep) : Array.from(it).join(sep);

console.log(join(ersteFuenf, '-'));
// Der Iterator ist jetzt verbraucht:
console.log(JSON.stringify(join(ersteFuenf, '-')));
1-2-3-4-5 ""

// Wichtig · Fallstricke

  • Kompatibilität: Iterator.prototype.join() ist ein TC39-Vorschlag und gehört noch nicht zum Standard. Es gibt die Methode nur in wenigen Engines. Prüfe vor dem Aufruf mit typeof it.join === 'function', ob sie vorhanden ist, und nutze sonst Array.from(it).join(sep) oder [...it].join(sep). Die Iterator-Helfer map(), filter() und take() aus den Beispielen gibt es erst ab ES2025 bzw. in aktuellen Browsern und Node.js 22+.
  • Verbrauch: Nach join() ist der Iterator erschöpft. Ein zweiter Aufruf liefert "".
  • Unendliche Iteratoren: Ohne take() oder eine andere Begrenzung endet der Aufruf nie und blockiert den Thread.
  • Umwandlung in Strings: Die Werte werden wie bei Array.prototype.join() in Strings umgewandelt. Objekte ergeben ohne eigenes toString() den Text "[object Object]". Ob null und undefined wie bei Arrays zu leeren Strings werden, kann sich mit dem Stand des Vorschlags noch ändern.
  • Die Methode gibt es nur auf echten Iterator-Objekten, die von Iterator.prototype erben. Reine Iterables wie Arrays, Strings oder Sets haben sie nicht direkt; wandle sie zuerst mit .values() oder Iterator.from() um.