Iterator.prototype.windows()
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die windows() Methode von Iterator Instanzen gibt ein neues Iterator-Hilfsobjekt zurück, das ein gleitendes Fenster von Elementen liefert. Jedes Mal, wenn der Helfer iteriert wird, gibt er ein Array zurück, das das erste Element der vorherigen Iteration entfernt und das nächste Element des ursprünglichen Iterators hinzufügt.
Um unterschiedliche Blöcke zu erhalten, siehe Iterator.prototype.chunks().
Syntax
windows(windowSize)
windows(windowSize, underSized)
Parameter
windowSize-
Die Anzahl der Elemente im gleitenden Fenster. Muss eine positive ganze Zahl kleiner als 232 (die maximale Array-Länge) sein.
underSizedOptional-
Ein String, der angibt, was zu tun ist, wenn die Anzahl der Elemente im Iterator kleiner als
windowSize, aber größer als 0 ist. Es kann einer der folgenden sein:"only-full"(Standard)-
Ignoriert das unvollständige Fenster. Der zurückgegebene Iterator wird sofort abgeschlossen, als ob der Eingang leer wäre.
"allow-partial"-
Alle Elemente im unvollständigen Fenster werden als Array (mit Länge kleiner als
windowSize) geliefert.
Beachten Sie, dass bei leerem Input der zurückgegebene Iterator immer sofort abgeschlossen wird, ohne ein leeres Array zu liefern.
Rückgabewert
Ein neues Iterator-Hilfsobjekt. Beim ersten Aufruf der next()-Methode des zurückgegebenen Iterator-Helfers wird der aktuelle Iterator sofort um windowSize Elemente vorgerückt. Wenn so viele Elemente verfügbar sind, werden sie zusammen als Array geliefert. Andernfalls hängt das Verhalten vom underSized-Argument ab: der Iterator wird entweder ohne Ausgabe sofort abgeschlossen (mit "only-full" oder bei vollständig leerem Eingang), oder es wird ein Array mit einer Länge kleiner als windowSize geliefert.
Danach besteht das jedes Mal gelieferte Array aus dem vorherigen Array, dem entferntem äußersten linken Element, einem neu aus dem Eingangsiterierbaren abgerufenen Element, das angehängt wird. Wenn das Eingangsiterierbare erschöpft ist, wird auch der Iterator-Helfer abgeschlossen.
Ausnahmen
TypeError-
Wird ausgelöst, wenn
limitkeine ganze Zahl ist oder wennunderSizednicht einer der erlaubten Werte ist. RangeError-
Wird ausgelöst, wenn
limitkleiner als 1 oder größer als 232-1 ist.
Beispiele
>Gleitender Durchschnitt
Das folgende Beispiel erstellt einen Iterator, der Elemente der Fibonacci-Folge liefert. Dann wird ein neuer Iterator erstellt, der jedes Mal den Durchschnitt von zwei benachbarten Elementen liefert.
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const averaged = fibonacci()
.windows(2)
.map((window) => (window[0] + window[1]) / 2);
console.log(averaged.next().value); // 1 (1, 1)
console.log(averaged.next().value); // 1.5 (1, 2)
console.log(averaged.next().value); // 2.5 (2, 3)
console.log(averaged.next().value); // 4 (3, 5)
Dieser Prozess, bekannt als gleitender Durchschnitt, ist in der Signalverarbeitung sehr nützlich.
Substrings aufzählen
Das folgende Beispiel zählt alle Substrings einer gegebenen Länge in einem String auf. Die windows()-Methode wird verwendet, um ein gleitendes Fenster von Zeichen zu erstellen, die dann zusammengefügt werden, um Substrings zu bilden.
Hinweis:
Dies ist wahrscheinlich viel weniger effizient als das manuelle Iterieren eines Indexes und der Aufruf der String.prototype.substring() Methode.
const chars = Iterator.from("MASSACHUSETTS");
const substrings = chars.windows(3).map((window) => window.join(""));
for (const substring of substrings) {
console.log(substring);
}
// MAS
// ASS
// SSA
// ...
Spezifikationen
| Spezifikation |
|---|
| Iterator Chunking> # sec-iterator.prototype.windows> |