Iterator.prototype.take()
Baseline 2025Newly 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
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
zuNaN
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:
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:
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:
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:
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:
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 |