Iterator.prototype.drop()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die drop()
-Methode von Iterator
-Instanzen gibt ein neues Iterator-Helferobjekt zurück, das die gegebene Anzahl von Elementen am Anfang dieses Iterators überspringt.
Syntax
drop(limit)
Parameter
limit
-
Die Anzahl der Elemente, die am Anfang der Iteration übersprungen werden.
Rückgabewert
Ein neues Iterator-Helferobjekt. Wenn die next()
-Methode des zurückgegebenen Iterator-Helfers zum ersten Mal aufgerufen wird, wird der aktuelle Iterator sofort um limit
Elemente vorgerückt, und dann wird das nächste Element (das limit+1
-te Element) ausgegeben. Der Iterator-Helfer gibt dann die verbleibenden Elemente nacheinander aus. Wenn der aktuelle Iterator weniger als limit
Elemente hat, wird der neue Iterator-Helfer sofort abgeschlossen, wenn next()
das erste Mal aufgerufen wird.
Ausnahmen
RangeError
-
Wird ausgelöst, wenn
limit
zuNaN
oder negativ wird, wenn es in eine Ganzzahl umgewandelt wird.
Beispiele
Verwendung von drop()
Im folgenden Beispiel wird ein Iterator erstellt, der Terme der Fibonacci-Folge ausgibt, beginnend mit dem dritten Term, indem die ersten beiden Terme übersprungen werden:
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const seq = fibonacci().drop(2);
console.log(seq.next().value); // 2
console.log(seq.next().value); // 3
Dies ist gleichbedeutend mit:
const seq = fibonacci();
seq.next();
seq.next();
Verwendung von drop() mit einer for...of-Schleife
drop()
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().drop(2)) {
console.log(n);
if (n > 30) {
break;
}
}
// Logs:
// 2
// 3
// 5
// 8
// 13
// 21
// 34
Kombination von drop() mit take()
Sie können drop()
mit Iterator.prototype.take()
kombinieren, um einen Abschnitt 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 Drop-Anzahl
Wenn limit
negativ oder NaN
ist, wird ein RangeError
ausgelöst:
fibonacci().drop(-1); // RangeError: -1 must be positive
fibonacci().drop(undefined); // RangeError: undefined must be positive
Wenn limit
größer ist als die Gesamtzahl der Elemente, die der Iterator produzieren kann (wie etwa Infinity
), wird der zurückgegebene Iterator-Helfer sofort alle Elemente überspringen und dann beim ersten Aufruf von next()
abgeschlossen. Wenn der aktuelle Iterator unendlich ist, wird der zurückgegebene Iterator-Helfer niemals abgeschlossen.
fibonacci().drop(Infinity).next(); // Never ends
new Set([1, 2, 3]).values().drop(Infinity).next(); // { value: undefined, done: true }
new Set([1, 2, 3]).values().drop(4).next(); // { value: undefined, done: true }
Spezifikationen
Specification |
---|
Iterator Helpers # sec-iteratorprototype.drop |
Browser-Kompatibilität
BCD tables only load in the browser