Spec-Zone.ru › JavaScript

Iterator.prototype.filter()

Базовый уровень Впервые доступно

Эта функция работает на новейших устройствах и версиях браузеров. Эта функция может не работать на старых устройствах или версиях браузеров. Она доступна во всех браузерах с марта 2025 года.

Метод filter() экземпляров Iterator возвращает новый вспомогательный объект итератора, который генерирует только те элементы итератора, для которых предоставленная функция обратного вызова возвращает true.

Синтаксис

filter(callbackFn)

Параметры

callbackFn
Функция, выполняемая для каждого элемента, сгенерированного итератором. Она должна возвращать истинное значение, чтобы элемент был сгенерирован вспомогательным объектом итератора, и ложное значение в противном случае. Функция вызывается со следующими аргументами:
element
Текущий обрабатываемый элемент.
index
Индекс текущего обрабатываемого элемента.

Возвращаемое значение

Новый вспомогательный объект итератора. Каждый раз, когда вызывается метод next() вспомогательного объекта итератора, он возвращает следующий элемент в итераторе, для которого функция обратного вызова возвращает true. Когда базовый итератор завершается, вспомогательный объект итератора также завершается (метод next() производит { value: undefined, done: true }).

Описание

Основное преимущество вспомогательных объектов итератора по сравнению с методами массивов заключается в том, что они являются ленивыми, то есть они производят следующее значение только по запросу. Это позволяет избежать ненужных вычислений, а также позволяет использовать их с бесконечными итераторами.

Примеры

Использование filter()

Следующий пример создает итератор, который генерирует члены последовательности Фибоначчи, а затем считывает первые несколько четных членов:

function* fibonacci() {
  let current = 1;
  let next = 1;
  while (true) {
    yield current;
    [current, next] = [next, current + next];
  }
}

const seq = fibonacci().filter((x) => x % 2 === 0);
console.log(seq.next().value); // 2
console.log(seq.next().value); // 8
console.log(seq.next().value); // 34

Использование filter() с циклом for...of

filter() наиболее удобен, когда вы не создаете итератор вручную. Поскольку итераторы также являются итерируемыми, вы можете выполнить итерацию возвращенного вспомогательного объекта с помощью цикла for...of:

for (const n of fibonacci().filter((x) => x % 2 === 0)) {
  console.log(n);
  if (n > 30) {
    break;
  }
}

// Logs:
// 2
// 8
// 34

Это эквивалентно:

for (const n of fibonacci()) {
  if (n % 2 !== 0) {
    continue;
  }
  console.log(n);
  if (n > 30) {
    break;
  }
}

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-iterator.prototype.filter

Совместимость с браузерами

Десктоп Мобильные Сервер
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
filter
122
117–119
122
117–119
131
108
103–105
18.4
122
117–119
131
81
78–79
18.4
26.0
24.0–25.0
122
117–119
18.4
1.1.31
1.39
22.0.0

Смотрите также

  • Полифил Iterator.prototype.filter в core-js
  • Полифил es-shims Iterator.prototype.filter
  • Iterator
  • Iterator.prototype.forEach()
  • Iterator.prototype.every()
  • Iterator.prototype.map()
  • Iterator.prototype.some()
  • Iterator.prototype.reduce()
  • Array.prototype.filter()

© 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/filter

Spec-Zone.ru

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