Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Iterator.prototype.take()

Baseline 2025
Neu verfügbar

Seit März 2025 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.

Die Methode take() von Iterator-Instanzen gibt ein neues Iterator-Hilfsobjekt zurück, das die angegebene Anzahl von Elementen aus diesem Iterator liefert und danach endet.

Syntax

js
take(limit)

Parameter

limit

Die Anzahl der Elemente, die vom Anfang der Iteration übernommen werden sollen.

Rückgabewert

Ein neues Iterator-Hilfsobjekt. Es liefert die Elemente des ursprünglichen Iterators nacheinander und endet dann (die Methode next() gibt { value: undefined, done: true } zurück), sobald limit Elemente geliefert wurden oder der ursprüngliche Iterator erschöpft ist – je nachdem, was zuerst eintritt.

Ausnahmen

RangeError

Wird ausgelöst, wenn limit bei der Umwandlung in eine Ganzzahl zu NaN oder einem negativen Wert wird.

Beispiele

take() verwenden

Das folgende Beispiel erstellt einen Iterator, der Glieder der Fibonacci-Folge liefert, und gibt anschließend die ersten drei Glieder aus:

js
function* fibonacci() {
  let current = 1;
  let next = 1;
  while (true) {
    yield current;
    [current, next] = [next, current + next];
  }
}

const seq = fibonacci().take(3);
console.log(seq.next().value); // 1
console.log(seq.next().value); // 1
console.log(seq.next().value); // 2
console.log(seq.next().value); // undefined

take() mit einer for...of-Schleife verwenden

take() ist besonders praktisch, wenn Sie den Iterator nicht selbst implementieren. Da Iteratoren auch iterierbar sind, können Sie das zurückgegebene Hilfsobjekt mit einer for...of-Schleife durchlaufen:

js
for (const n of fibonacci().take(5)) {
  console.log(n);
}

// Logs:
// 1
// 1
// 2
// 3
// 5

Da fibonacci() ein unendlicher Iterator ist, würde das Durchlaufen mit einer for-Schleife ohne eine Möglichkeit zum vorzeitigen Beenden (etwa eine break-Anweisung) zu einer Endlosschleife führen.

drop() mit take() kombinieren

Sie können take() mit Iterator.prototype.drop() kombinieren, um einen Ausschnitt eines Iterators zu erhalten:

js
for (const n of fibonacci().drop(2).take(5)) {
  // Drops the first two elements, then takes the next five
  console.log(n);
}
// Logs:
// 2
// 3
// 5
// 8
// 13

for (const n of fibonacci().take(5).drop(2)) {
  // Takes the first five elements, then drops the first two
  console.log(n);
}
// Logs:
// 2
// 3
// 5

Untere und obere Grenzen der Anzahl

Wenn limit negativ oder NaN ist, wird ein RangeError ausgelöst:

js
fibonacci().take(-1); // RangeError: -1 must be positive
fibonacci().take(undefined); // RangeError: undefined must be positive

Wenn limit größer ist als die Gesamtzahl der Elemente, die der Iterator liefern kann (beispielsweise Infinity), verhält sich das zurückgegebene Iterator-Hilfsobjekt im Wesentlichen wie der ursprüngliche Iterator:

js
for (const n of new Set([1, 2, 3]).values().take(Infinity)) {
  console.log(n);
}

// Logs:
// 1
// 2
// 3

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-iterator.prototype.take

Browser-Kompatibilität

Siehe auch