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

Iterator.prototype.drop()

Methode

Gibt ein neues Iterator-Helferobjekt zurück, das die ersten <code>limit</code> Elemente des Iterators überspringt und danach alle weiteren liefert.

seit JavaScript ES2025 (Iterator-Helfer); Baseline 2025: Chrome 12 Kategorie: method-property

Signatur

Iterator.prototype.drop(limit)

Beschreibung

drop() gehört zu den Iterator-Helfern. Die Methode erzeugt einen neuen Iterator, der beim ersten Aufruf von next() die ersten limit Werte des Quell-Iterators verwirft und danach alle übrigen Werte unverändert weitergibt. Das Gegenstück ist take(), das nur die ersten n Elemente liefert.

Wie alle Iterator-Helfer arbeitet drop() verzögert (lazy): Beim Aufruf passiert noch nichts, der Quell-Iterator wird erst bei Bedarf weitergeschaltet. Deshalb funktioniert drop() auch mit unendlichen Iteratoren, etwa Generatoren, und braucht keinen Zwischenspeicher wie Array.prototype.slice().

Typische Einsatzfälle sind das Überspringen von Kopfzeilen beim zeilenweisen Verarbeiten, Paginierung über Generatoren (drop(offset).take(limit)) oder das Ignorieren der ersten Werte einer Folge. Da das Ergebnis selbst ein Iterator-Helfer ist, lässt es sich mit map(), filter(), take() oder toArray() verketten.

Parameter

Name Typ Default Beschreibung
$limit Pflicht number Anzahl der zu überspringenden Elemente am Anfang. Wird in eine Zahl umgewandelt und abgerundet; Infinity ist erlaubt (überspringt alles). Negative Werte oder NaN werfen einen RangeError.

Rückgabewert

Typ
Iterator
Beschreibung
Ein neues Iterator-Helferobjekt, das nach dem Überspringen von limit Elementen die restlichen Werte des Quell-Iterators liefert. Ist der Quell-Iterator vorher erschöpft, ist auch der neue Iterator sofort fertig.

Beispiele

Die ersten Elemente eines Arrays überspringen

const zahlen = [10, 20, 30, 40, 50];

const rest = zahlen.values().drop(2).toArray();
console.log(rest);
[30, 40, 50]

Paginierung über einen unendlichen Generator

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

const seite = (nr, groesse) =>
  natuerlicheZahlen()
    .drop((nr - 1) * groesse)
    .take(groesse)
    .toArray();

console.log(seite(3, 5));
[11, 12, 13, 14, 15]

CSV-Kopfzeile überspringen und Zeilen verarbeiten

const csv = `name,alter
Anna,31
Ben,27
Clara,45`;

const personen = csv
  .split('\n')
  .values()
  .drop(1) // Kopfzeile verwerfen
  .map((zeile) => {
    const [name, alter] = zeile.split(',');
    return { name, alter: Number(alter) };
  })
  .filter((p) => p.alter > 30)
  .toArray();

console.log(personen);
[{ name: 'Anna', alter: 31 }, { name: 'Clara', alter: 45 }]

Ungültiges Limit abfangen

try {
  [1, 2, 3].values().drop(-1);
} catch (err) {
  console.log(err.name);
}
RangeError

// Wichtig · Fallstricke

  • Nur auf Iteratoren, nicht auf Arrays: [1, 2, 3].drop(1) wirft einen TypeError. Zuerst mit .values() oder Iterator.from() einen Iterator erzeugen.
  • Einmal verwendbar: Der zurückgegebene Iterator teilt sich den Zustand mit dem Quell-Iterator. Wer die Quelle parallel weiterschaltet, verändert auch das Ergebnis.
  • Lazy: Das Überspringen findet erst beim ersten next() statt, nicht schon beim Aufruf von drop(). Seiteneffekte in Generatoren treten also erst dann auf.
  • Ein RangeError (negativ oder NaN) wird sofort beim Aufruf von drop() geworfen, nicht erst beim Durchlaufen.
  • drop(Infinity) auf einem unendlichen Iterator endet nie.
  • Kompatibilität: Iterator-Helfer gibt es erst seit 2024/2025 (Chrome 122, Firefox 131, Safari 18.4, Node.js 22). Für ältere Umgebungen gibt es Polyfills, z. B. core-js. Für asynchrone Iteratoren existiert drop() noch nicht, das ist Teil eines eigenen Vorschlags (Async Iterator Helpers).