Iterator.prototype.find()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

Iterator 实例的 find() 方法与 Array.prototype.find() 类似:它返回迭代器生成的第一个满足提供的测试函数的元素。如果没有值满足测试函数,则返回 undefined

语法

js
find(callbackFn)

参数

callbackFn

为迭代器中的每个元素执行的函数。它应该返回一个真值来表示找到了一个匹配的元素,否则返回一个假值。该函数被调用时将传入以下参数:

element

当前正在处理的元素。

index

当前正在处理的元素的索引。

返回值

迭代器生成的第一个满足提供的测试函数的元素。如果没有值满足测试函数,则返回 undefined

描述

find() 迭代该迭代器并对每个元素调用一次 callbackFn 函数。如果 callbackFn 函数返回一个真值,则立即返回该元素。否则,它会一直迭代到迭代器的末尾,并返回 undefined。如果 find() 返回了一个元素,则会调用底层迭代器的 return() 方法来关闭它。

迭代器辅助方法相对于数组方法的主要优势在于它们能够处理无限迭代器。对于无限迭代器,find() 会在找到第一个满足元素时立即返回。如果 callbackFn 始终返回假值,则该方法永远不会返回。

示例

使用 find()

js
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)); // 永远不会完成

调用 find() 总是关闭底层迭代器,即使该方法提前返回。迭代器永远不会处于中间状态。

js
const seq = fibonacci();
console.log(seq.find(isEven)); // 2
console.log(seq.next()); // { value: undefined, done: true }

规范

Specification
Iterator Helpers
# sec-iteratorprototype.find

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
find

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
See implementation notes.
Has more compatibility info.

参见