TypedArray.prototype.some()

这个 some() 方法检测 TypedArray 的一些元素是否通过所提供函数的测试。这个方法和 Array.prototype.some() 相同。 TypedArraytyped array types 之一。

尝试一下

语法

js

some(callbackFn)
some(callbackFn, thisArg)

参数

callback

一个测试每个元素的函数,有 3 个参数:

currentValue

在 typed array 中,正在被测试的元素。

index

在 typed array 中,正在被测试元素的索引。

array

正在被调用的 typed array 本身。

thisArg

可选的。callback 回调函数的 this 值 .

返回值

true 如果 callback 函数以任一数组元素为参数调用时,返回 truthy; 否则,false.

描述

对于 typed array 中的每个元素,some方法执行一次 callback,直到找到一个callback 返回 true 的元素。如果一个元素被找到,some 立即返回 true. 否则,some 返回 false.

callback 期望 3 个参数:元素的值,元素的索引,和被遍历的数组对象。

如果 some 提供 thisArg, 那么thisArg会作为 callback 调用时的this 值. 否则,callback 调用时的 thisundefined. callback 最终可观测的this 是根据 确定函数 this 的通常规则 所确定的。

some 被调用不会改变 typed array .

示例

Testing size of all typed array elements

以下示例测试 typed array 中的所有元素都大于 10.

js

function isBiggerThan10(element, index, array) {
  return element > 10;
}
new Uint8Array([2, 5, 8, 1, 4]).some(isBiggerThan10); // false
new Uint8Array([12, 5, 8, 1, 4]).some(isBiggerThan10); // true

Testing typed array elements using arrow functions

Arrow functions 提供更段的语法做相同的测试。

js

new Uint8Array([2, 5, 8, 1, 4]).some((elem) => elem > 10); // false
new Uint8Array([12, 5, 8, 1, 4]).some((elem) => elem > 10); // true

Polyfill

由于没有名为 TypedArray 的全局对象, 必须在“as needed”的基础上进行填充。

js

// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.some
if (!Uint8Array.prototype.some) {
  Object.defineProperty(Uint8Array.prototype, "some", {
    value: Array.prototype.some,
  });
}

假如你需要支持的过时 JavaScript 引擎不支持Object.defineProperty,最好不要使用Array.prototype方法填充,因为你不能让它们不可枚举。

标准

Specification
ECMAScript Language Specification
# sec-%typedarray%.prototype.some

浏览器兼容性

BCD tables only load in the browser

参阅