Iterator.prototype.some()

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

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;
const isPositive = (x) => x > 0;
console.log(fibonacci().take(10).some(isPositive)); // 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 }

规范

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

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参见