Iterator.prototype.some()

基准线 2025
新推出

自 ⁨2025 年 3 月⁩ 起,此功能可在最新的设备和浏览器版本上使用。此功能可能在旧设备或浏览器上无法正常工作。

some() 方法是 Iterator 实例上的一个方法,它类似于 Array.prototype.some():它测试由迭代器产生的至少一个元素是否通过了提供的函数实现的测试。它返回一个布尔值。

语法

js
some(callbackFn)

参数

callbackFn

一个要为迭代器产生的每个元素执行的函数。它应该返回一个真值以指示元素通过了测试,否则返回一个假值。该函数将使用以下参数调用

element

正在处理的当前元素。

index

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

返回值

如果回调函数至少对一个元素返回了真值,则为 true。否则为 false

描述

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

迭代器辅助函数相比数组方法的主要优势在于它们是惰性的,这意味着它们只在被请求时才产生下一个值。这避免了不必要的计算,并且也允许它们与无限迭代器一起使用。对于无限迭代器,some() 会在找到第一个真值后立即返回 true。如果 callbackFn 始终返回假值,则该方法永远不会返回。

示例

使用 some()

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().some(isEven)); // true

const isNegative = (x) => x < 0;
console.log(fibonacci().take(10).some(isNegative)); // false
console.log(fibonacci().some(isNegative)); // Never completes

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

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

规范

规范
ECMAScript® 2026 语言规范
# sec-iterator.prototype.some

浏览器兼容性

另见