Iterator.prototype.windows()
Die windows() Methode von Iterator Instanzen gibt ein neues Iterator-Helferobjekt zurück, das ein gleitendes Fenster von Elementen liefert. Jedes Mal, wenn der Helfer iteriert wird, liefert er ein Array, das das erste Element der vorherigen Iteration entfernt und das nächste Element des ursprünglichen Iterators hinzufügt.
Um unterschiedliche Abschnitte zu erhalten, siehe Iterator.prototype.chunks().
Syntax
windows(windowSize)
windows(windowSize, underSized)
Parameter
windowSize-
Die Anzahl der Elemente im gleitenden Fenster. Muss eine positive Ganzzahl weniger als 232 (die maximale Array-Länge) sein.
underSizedOptional-
Ein String, der angibt, was zu tun ist, wenn die Anzahl der Elemente im Iterator weniger als
windowSizeaber größer als 0 ist. Es kann einer der folgenden sein:"only-full"(Standard)-
Ignoriere das teilweise Fenster. Der zurückgegebene Iterator wird sofort abgeschlossen, als ob die Eingabe leer wäre.
"allow-partial"-
Liefert alle Elemente im teilweisen Fenster als ein Array (mit Länge kleiner als
windowSize).
Beachten Sie, dass der zurückgegebene Iterator, wenn die Eingabe leer ist, immer sofort ohne Ausgabe eines leeren Arrays abgeschlossen wird.
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 windowSize Elemente weitergeschaltet. 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 sofort ohne Ausgabe von etwas abgeschlossen (bei "only-full" oder bei einer vollständig leeren Eingabe), oder ein Array mit einer Länge kleiner als windowSize wird geliefert.
Danach besteht jedes Mal das gelieferte Array aus dem vorherigen Array, das linkeste Element entfernt, ein neues Element aus dem Eingabeiterable hinzugefügt. Wenn das Eingabeiterable erschöpft ist, wird der Iterator-Helfer auch abgeschlossen.
Ausnahmen
TypeError-
Wird ausgelöst, wenn
limitkeine Ganzzahl ist oder wennunderSizednicht einer der erlaubten Werte ist. RangeError-
Wird ausgelöst, wenn
limitweniger als 1 oder größer als 232-1 ist.
Beispiele
>Gleitender Durchschnitt
Das folgende Beispiel erzeugt einen Iterator, der Begriffe 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 sehr nützlich in der Signalverarbeitung.
Aufzählen von Teilstrings
Das folgende Beispiel zählt alle Teilstrings 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 Teilstrings zu bilden.
Hinweis:
Dies ist wahrscheinlich viel weniger effizient, als manuell einen Zahlenindex zu iterieren und die Methode String.prototype.substring() aufzurufen.
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> |