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
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
limitbei der Umwandlung in eine Ganzzahl zuNaNoder 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:
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:
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:
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:
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:
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> |