Iterator.prototype.find()
Базовый уровень Недавно доступно
Эта функция работает на новейших устройствах и версиях браузеров. Эта функция может не работать в старых устройствах или версиях браузеров. Она доступна во всех браузерах с марта 2025 года.
Метод find() экземпляров Iterator аналогичен Array.prototype.find(): он возвращает первый элемент, сгенерированный итератором, который удовлетворяет предоставленной тестовой функции. Если никакие значения не удовлетворяют тестовой функции, возвращается undefined.
Синтаксис
find(callbackFn)
Параметры
-
callbackFn - Функция, выполняемая для каждого элемента, сгенерированного итератором. Она должна возвращать истинное (truthy) значение, чтобы указать, что подходящий элемент найден, и ложное (falsy) значение в противном случае. Функция вызывается со следующими аргументами:
-
element - Текущий обрабатываемый элемент.
-
index - Индекс текущего обрабатываемого элемента.
-
Возвращаемое значение
Первый элемент, сгенерированный итератором, который удовлетворяет предоставленной тестовой функции. В противном случае возвращается undefined.
Описание
find() итерирует итератор и вызывает функцию callbackFn один раз для каждого элемента. Он немедленно возвращает элемент, если функция обратного вызова возвращает истинное значение. В противном случае он итерирует до конца итератора и возвращает undefined. Если find() возвращает элемент, базовый итератор закрывается вызовом его метода return().
Основное преимущество вспомогательных функций итератора перед методами массива заключается в том, что они являются ленивыми, то есть они генерируют следующее значение только по запросу. Это позволяет избежать ненужных вычислений, а также позволяет использовать их с бесконечными итераторами. С бесконечными итераторами find() возвращает первый подходящий элемент, как только он найден. Если callbackFn всегда возвращает ложное значение, метод никогда не завершается.
Вызов find() всегда закрывает базовый итератор, даже если метод возвращает значение досрочно. Итератор никогда не остается в промежуточном состоянии.
Примеры
Использование find()
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const isEven = (x) => x % 2 === 0;
console.log(fibonacci().find(isEven)); // 2
const isNegative = (x) => x < 0;
console.log(fibonacci().take(10).find(isNegative)); // undefined
console.log(fibonacci().find(isNegative)); // Never completes
Метод закрывает итератор после возврата.
const seq = fibonacci();
console.log(seq.find(isEven)); // 2
console.log(seq.next()); // { value: undefined, done: true }
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | |
find |
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.findвcore-js - Полифил es-shims
Iterator.prototype.find IteratorIterator.prototype.every()Iterator.prototype.some()Array.prototype.find()
© 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/find