Iterator.prototype.some()

Limited availability

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

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

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

语法

js
some(callbackFn)

参数

callbackFn

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

element

当前正在处理的元素。

index

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

返回值

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

描述

some() 迭代该迭代器,并对每个元素调用一次 callbackFn 函数。如果 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;
const isPositive = (x) => x > 0;
console.log(fibonacci().take(10).some(isPositive)); // false
console.log(fibonacci().some(isNegative)); // 永远不会结束

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

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

规范

Specification
Iterator Helpers
# sec-iteratorprototype.some

浏览器兼容性

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
some

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.

参见