Iterator.prototype.windows()
Экспериментальная функция: Это экспериментальная технология
Внимательно проверьте таблицу совместимости браузеров перед использованием этого в производственной среде.
Экспериментальная функция: Это экспериментальная технология
Внимательно проверьте таблицу совместимости браузеров перед использованием этого в производственной среде.
Метод windows() экземпляров Iterator возвращает новый объект-помощник итератора, который выдает скользящее окно элементов. Каждый раз, когда вызывается помощник, он выдает массив, удаляя первый элемент из предыдущей итерации и добавляя следующий элемент из исходного итератора.
Для получения отдельных фрагментов см. Iterator.prototype.chunks().
Синтаксис
windows(windowSize) windows(windowSize, underSized)
Параметры
-
windowSize - Количество элементов в скользящем окне. Должно быть положительным целым числом, меньшим 232 (максимальная длина массива).
-
underSizedНеобязательный - Строка, определяющая, что делать, когда количество элементов в итераторе меньше
windowSize, но больше 0. Она может быть одним из следующих значений:-
"only-full"(по умолчанию) - Игнорировать частичное окно. Возвращаемый итератор немедленно завершается, как если бы входные данные были пустыми.
-
"allow-partial" - Выдать все элементы в частичном окне в виде массива (с длиной меньше
windowSize).
Обратите внимание, что когда входные данные пусты, возвращаемый итератор всегда немедленно завершается без выдачи пустого массива.
-
Возвращаемое значение
Новый объект-помощник итератора. При первом вызове метода next() возвращаемого объекта-помощника итератора, текущий итератор немедленно продвигается на windowSize элементов. Если имеется достаточное количество элементов, они выдаются вместе в виде массива. В противном случае поведение зависит от аргумента underSized: итератор либо немедленно завершается без выдачи чего-либо (с "only-full" или при полностью пустых входных данных), либо выдается массив длиной менее windowSize.
После этого, каждый раз, выдаваемый массив состоит из предыдущего массива, удаленного левого элемента и добавленного нового элемента, полученного из входного итерируемого объекта. Когда входной итерируемый объект исчерпан, объект-помощник итератора также завершается.
Исключения
-
TypeError - Выбрасывается, если
limitне является целым числом, или еслиunderSizedне является одним из допустимых значений. -
RangeError - Выбрасывается, если
limitменьше 1 или больше 232-1.
Примеры
Скользящее среднее
Следующий пример создает итератор, который выдает члены последовательности Фибоначчи. Затем создается новый итератор, который каждый раз выдает среднее значение двух соседних элементов.
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)
Этот процесс, известный как скользящее среднее, очень полезен в обработке сигналов.
Перечисление подстрок
Следующий пример перебирает все подстроки заданной длины в строке. Метод windows() используется для создания скользящего окна символов, которые затем объединяются для формирования подстрок.
Примечание: Это, вероятно, гораздо менее эффективно, чем ручное итерирование числового индекса и вызов метода String.prototype.substring().
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
// ...
Спецификации
| Спецификация |
|---|
| Chunking Iterators # sec-iterator.prototype.windows |
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
windows |
Нет |
Нет |
154 |
Нет |
preview |
Нет |
154 |
Нет |
Нет |
Нет |
Нет |
Нет |
1.4.0 |
? |
? |
См. также
- Polyfill of
Iterator.prototype.windowsincore-js - es-shims polyfill of
Iterator.prototype.windows IteratorIterator.prototype.chunks()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator/windows