迭代器.prototype.find()

实验性: 这是 实验性技术
在生产环境中使用之前,请仔细查看 浏览器兼容性表

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

语法

js
find(callbackFn)

参数

callbackFn

对迭代器产生的每个元素执行的函数。它应该返回一个 真值 来表示已找到匹配的元素,否则返回一个 假值。该函数使用以下参数调用

element

正在处理的当前元素。

index

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

返回值

迭代器产生的第一个满足提供的测试函数的元素。否则,返回 undefined

描述

find() 迭代迭代器并为每个元素调用一次 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)); // Never completes

调用 find() 始终会关闭基础迭代器,即使该方法提前返回。迭代器永远不会处于半途状态。

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

规范

规范
迭代器助手
# sec-iteratorprototype.find

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅