Iterator.prototype.take()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die take()
-Methode von Iterator
-Instanzen gibt einen neuen Iterator-Helfer zurück, der 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 neuer Iterator-Helfer. Der zurückgegebene Iterator-Helfer liefert die Elemente im ursprünglichen Iterator nacheinander und beendet dann die Iteration (die next()
-Methode produziert { 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
wird oder negativ ist, wenn es in eine Ganzzahl umgewandelt wird.
Beispiele
Verwendung von take()
Im folgenden Beispiel wird ein Iterator erstellt, der Elemente der Fibonacci-Folge liefert, und dann werden die ersten drei Elemente protokolliert:
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 bequemsten, wenn Sie den Iterator nicht manuell erstellen. 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
Da fibonacci()
ein unendlicher Iterator ist, können Sie ihn nicht direkt mit einer for
-Schleife durchlaufen.
Kombinieren von drop() mit take()
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 des take-Zählers
Wenn limit
negativ ist oder NaN
, 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 als die Gesamtanzahl der Elemente ist, die der Iterator erzeugen kann (wie Infinity
), hat der zurückgegebene Iterator-Helfer im Wesentlichen das gleiche 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 |
Browser-Kompatibilität
BCD tables only load in the browser