此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
Array.prototype.some()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
some() 方法测试数组中是否至少有一个元素通过了由提供的函数实现的测试。如果在数组中找到一个元素使得提供的函数返回 true,则返回 true;否则返回 false。它不会修改数组。
In this article
尝试一下
const array = [1, 2, 3, 4, 5];// Checks whether an element is evenconst even = (element) => element % 2 === 0;console.log(array.some(even));// Expected output: true语法
some(callbackFn)some(callbackFn, thisArg)参数
返回值
如果回调函数对数组中至少一个元素返回一个真值,则返回true。否则返回false。
描述
some() 方法是一个迭代方法。它为数组中的每个元素调用一次指定的callbackFn 函数,直到callbackFn 返回一个真值。如果找到这样的元素,some() 方法将会立即返回true 并停止遍历数组。否则,如果callbackFn 对所有元素都返回假值,some() 就会返回false。
some() 类似于数学中的“存在量词(∃)”。特别地,在对于一个空数组,任何条件下它都返回false。
callbackFn 仅针对已分配值的数组索引调用。它不会为稀疏数组中的空槽调用。
some() 不会改变调用它的数组,但指定的callbackFn 函数可以。但是请注意,数组的长度是在第一次调用callbackFn之前保存的。因此:
- 当开始调用
some()时,callbackFn将不会访问超出数组初始长度的任何元素。 - 对已访问索引的更改不会导致再次在这些元素上调用
callbackFn。 - 如果数组中一个现有的、尚未访问的元素被
callbackFn更改,则它传递给callbackFn的值将是该元素被修改后的值。被删除的元素则不会被访问。
警告:上述类型的并发修改经常导致难以理解的代码,通常应避免(特殊情况除外)。
some() 方法是通用的。它只期望this 值具有length 属性和整数键属性。
示例
>测试数组元素的值
下面的例子检测在数组中是否有元素大于 10。
function isBiggerThan10(element, index, array) { return element > 10;}[2, 5, 8, 1, 4].some(isBiggerThan10); // false[12, 5, 8, 1, 4].some(isBiggerThan10); // true使用箭头函数测试数组元素的值
箭头函数可以通过更简洁的语法实现相同的用例。
[2, 5, 8, 1, 4].some((x) => x > 10); // false[12, 5, 8, 1, 4].some((x) => x > 10); // true判断数组元素中是否存在某个值
此例为模仿includes() 方法,若元素在数组中存在,则回调函数返回值为true :
const fruits = ["apple", "banana", "mango", "guava"];function checkAvailability(arr, val) { return arr.some((arrVal) => val === arrVal);}checkAvailability(fruits, "kela"); // falsecheckAvailability(fruits, "banana"); // true将任意值转换为布尔类型
const TRUTHY_VALUES = [true, "true", 1];function getBoolean(value) { if (typeof value === "string") { value = value.toLowerCase().trim(); } return TRUTHY_VALUES.some((t) => t === value);}getBoolean(false); // falsegetBoolean("false"); // falsegetBoolean(1); // truegetBoolean("true"); // true在稀疏数组上使用 some()
some() 不会在空槽上运行它的断言函数。
console.log([1, , 3].some((x) => x === undefined)); // falseconsole.log([1, , 1].some((x) => x !== 1)); // falseconsole.log([1, undefined, 1].some((x) => x !== 1)); // true在非数组对象上调用 some()
some() 方法读取this 的length 属性,然后访问每个整数索引,直到到达末尾或callbackFn 返回true。
const arrayLike = { length: 3, 0: "a", 1: "b", 2: "c",};console.log(Array.prototype.some.call(arrayLike, (x) => typeof x === "number"));// false规范
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype.some> |