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;
}
}
Спецификации
Совместимость с браузерами
| Десктоп | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 IteratorIterator.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