Spec-Zone.ru › JavaScript

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.windows in core-js
  • es-shims polyfill of Iterator.prototype.windows
  • Iterator
  • Iterator.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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API