Array.prototype.every()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Array 实例的 every() 方法测试数组中的所有元素是否通过提供的函数实现的测试。它返回一个布尔值。
¥The every() method of Array instances tests whether
all elements in the array pass the test implemented by the provided function. It
returns a Boolean value.
Try it
语法
参数
返回值
描述
¥Description
every() 方法是 迭代法 方法。它为数组中的每个元素调用一次提供的 callbackFn 函数,直到 callbackFn 返回 falsy 值。如果找到这样的元素,every() 立即返回 false 并停止遍历数组。否则,如果 callbackFn 对所有元素返回 truthy 值,则 every() 返回 true。请阅读 迭代法 部分,了解有关这些方法一般如何工作的更多信息。
¥The every() method is an iterative method. It calls a provided callbackFn function once for each element in an array, until the callbackFn returns a falsy value. If such an element is found, every() immediately returns false and stops iterating through the array. Otherwise, if callbackFn returns a truthy value for all elements, every() returns true. Read the iterative methods section for more information about how these methods work in general.
every 的作用类似于数学中的 "对全部" 量词。特别是,对于空数组,它返回 true。(空集 的所有元素满足任意给定条件就是 空洞真实。)
¥every acts like the "for all" quantifier in mathematics. In particular, for an empty array, it returns true. (It is vacuously true that all elements of the empty set satisfy any given condition.)
callbackFn 仅针对已赋值的数组索引调用。稀疏数组 中的空槽不会调用它。
¥callbackFn is invoked only for array indexes which have assigned values. It is not invoked for empty slots in sparse arrays.
every() 方法是 generic。它只期望 this 值具有 length 属性和整数键控属性。
¥The every() method is generic. It only expects the this value to have a length property and integer-keyed properties.
示例
测试所有数组元素的大小
¥Testing size of all array elements
以下示例测试数组中的所有元素是否为 10 或更大。
¥The following example tests whether all elements in the array are 10 or bigger.
function isBigEnough(element, index, array) {
return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true
检查一个数组是否是另一个数组的子集
¥Check if one array is a subset of another array
以下示例测试一个数组的所有元素是否都存在于另一个数组中。
¥The following example tests if all the elements of an array are present in another array.
const isSubset = (array1, array2) =>
array2.every((element) => array1.includes(element));
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 7, 6])); // true
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 8, 7])); // false
使用 callbackFn 的第三个参数
¥Using the third argument of callbackFn
如果你想访问数组中的另一个元素,则 array 参数很有用。以下示例首先使用 filter() 提取正值,然后使用 every() 检查数组是否严格递增。
¥The array argument is useful if you want to access another element in the array. The following example first uses filter() to extract the positive values and then uses every() to check whether the array is strictly increasing.
const numbers = [-2, 4, -8, 16, -32];
const isIncreasing = numbers
.filter((num) => num > 0)
.every((num, idx, arr) => {
// Without the arr argument, there's no way to easily access the
// intermediate array without saving it to a variable.
if (idx === 0) return true;
return num > arr[idx - 1];
});
console.log(isIncreasing); // true
在稀疏数组上使用 every()
对非数组对象调用 every()
¥Calling every() on non-array objects
every() 方法读取 this 的 length 属性,然后使用小于 length 的非负整数键访问每个属性,直到它们全部被访问或 callbackFn 返回 false。
¥The every() method reads the length property of this and then accesses each property with a nonnegative integer key less than length until they all have been accessed or callbackFn returns false.
const arrayLike = {
length: 3,
0: "a",
1: "b",
2: "c",
3: 345, // ignored by every() since length is 3
};
console.log(
Array.prototype.every.call(arrayLike, (x) => typeof x === "string"),
); // true
规范
| Specification |
|---|
| ECMAScript Language Specification # sec-array.prototype.every |
浏览器兼容性
BCD tables only load in the browser