Iterator.prototype.take()

Baseline 2025
Newly available

Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

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

Syntax

js
take(limit)

Parameter

limit

Die Anzahl der Elemente, die vom Beginn der Iteration an genommen werden sollen.

Rückgabewert

Ein neues Iterator-Hilfsobjekt. Der zurückgegebene Iterator-Helfer liefert die Elemente im ursprünglichen Iterator nacheinander und schließt dann ab (die next()-Methode erzeugt { value: undefined, done: true }), sobald limit Elemente geliefert wurden oder wenn der ursprüngliche Iterator erschöpft ist, je nachdem, was zuerst eintritt.

Ausnahmen

RangeError

Wird ausgelöst, wenn limit zu NaN oder negativ wird, wenn es in eine Ganzzahl umgewandelt wird.

Beispiele

Verwendung von take()

Das folgende Beispiel erzeugt einen Iterator, der Begriffe in der Fibonacci-Folge liefert, und gibt dann die ersten drei Begriffe 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

Verwendung von take() mit einer for...of-Schleife

take() ist am praktischsten, wenn Sie den Iterator nicht manuell rollen. Da Iteratoren auch iterierbar sind, können Sie den zurückgegebenen Helfer mit einer for...of-Schleife durchlaufen:

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

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

Weil fibonacci() ein unendlicher Iterator ist, würde die Verwendung einer for-Schleife zum Durchlaufen ohne jegliche Logik zum vorzeitigen Beenden (wie eine break-Anweisung) zu einer Endlosschleife führen.

Kombination von drop() mit take()

Sie können take() mit Iterator.prototype.drop() kombinieren, um ein Stück 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 Entnahmemenge

Wenn der 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 der limit größer ist als die Gesamtzahl der Elemente, die der Iterator erzeugen kann (wie Infinity), hat der zurückgegebene Iterator-Helfer im Wesentlichen dasselbe Verhalten 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

Specification
Iterator Helpers
# sec-iteratorprototype.take

Browser-Kompatibilität

Siehe auch