Iterator.prototype.windows()
Die Methode windows() von Iterator-Instanzen gibt ein neues Iterator-Hilfsobjekt zurück, das ein gleitendes Fenster von Elementen liefert. Bei jeder Iteration liefert das Hilfsobjekt ein Array, bei dem das erste Element der vorherigen Iteration entfernt und das nächste Element des ursprünglichen Iterators hinzugefügt wurde.
Wenn Sie stattdessen getrennte Blöcke erhalten möchten, verwenden Sie 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 sein (die maximale Array-Länge).
underSizedOptional-
Ein String, der festlegt, was geschehen soll, wenn der Iterator weniger als
windowSize, aber mehr als 0 Elemente enthält. Folgende Werte sind möglich:"only-full"(Standardwert)-
Das unvollständige Fenster ignorieren. Der zurückgegebene Iterator wird sofort beendet, als wäre die Eingabe leer.
"allow-partial"-
Alle Elemente des unvollständigen Fensters als Array liefern (mit einer Länge kleiner als
windowSize).
Ist die Eingabe leer, wird der zurückgegebene Iterator stets sofort beendet, ohne ein leeres Array zu liefern.
Rückgabewert
Ein neues Iterator-Hilfsobjekt. Beim ersten Aufruf der Methode next() des zurückgegebenen Iterator-Hilfsobjekts wird der aktuelle Iterator sofort um windowSize Elemente weitergeschaltet. Sind so viele Elemente verfügbar, werden sie gemeinsam als Array geliefert. Andernfalls hängt das Verhalten vom Argument underSized ab: Der Iterator wird entweder sofort beendet, ohne etwas zu liefern (bei "only-full" oder einer vollständig leeren Eingabe), oder es wird ein Array mit einer Länge kleiner als windowSize geliefert.
Danach besteht jedes gelieferte Array aus dem vorherigen Array, aus dem das erste Element entfernt und an das ein neues Element aus dem Eingabe-Iterable angehängt wurde. Sobald das Eingabe-Iterable erschöpft ist, wird auch das Iterator-Hilfsobjekt beendet.
Ausnahmen
TypeError-
Wird ausgelöst, wenn
limitkeine ganze Zahl ist oderunderSizedkeinen der zulässigen Werte hat. 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 Glieder der Fibonacci-Folge liefert. Anschließend wird ein neuer Iterator erstellt, der jeweils den Durchschnitt zweier benachbarter Elemente 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)
Dieses als gleitender Durchschnitt bezeichnete Verfahren ist in der Signalverarbeitung sehr nützlich.
Teilstrings aufzählen
Das folgende Beispiel zählt alle Teilstrings einer bestimmten Länge in einem String auf. Die Methode windows() erstellt dazu ein gleitendes Fenster aus Zeichen, die anschließend zu Teilstrings zusammengefügt werden.
Hinweis:
Dies ist wahrscheinlich deutlich weniger effizient, als manuell über numerische Indizes 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> |