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 Instanzen des Iterator
gibt ein neues Iterator-Helfer-Objekt 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 Anfang der Iteration genommen werden sollen.
Rückgabewert
Ein neues Iterator-Helfer-Objekt. Der zurückgegebene Iterator-Helfer liefert die Elemente im ursprünglichen Iterator eins nach dem anderen und beendet dann (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
oder negativ wird, wenn es in eine Ganzzahl umgewandelt wird.
Beispiele
Verwendung von take()
Das folgende Beispiel erstellt einen Iterator, der Begriffe der Fibonacci-Folge liefert und dann die ersten drei Begriffe 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 praktischsten, 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 keine for
Schleife verwenden, um ihn direkt zu durchlaufen.
Kombination 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
Unter- und Obergrenzen der Anzahl der Entnahmen
Wenn das 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 das limit
größer ist als die Gesamtanzahl der Elemente, die der Iterator produzieren kann (wie zum Beispiel 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 |
Browser-Kompatibilität
BCD tables only load in the browser