Array.prototype.every()
every()
方法是 Array
实例的方法,用于测试数组中的所有元素是否都通过提供的函数实现的测试。它返回一个布尔值。
试一试
语法
js
every(callbackFn)
every(callbackFn, thisArg)
参数
返回值
除非 callbackFn
对数组元素返回假值,否则返回 true
,在这种情况下,立即返回 false
。
描述
every()
方法是一个迭代方法。它对数组中的每个元素调用提供的 callbackFn
函数一次,直到 callbackFn
返回假值。如果找到这样的元素,则 every()
立即返回 false
并停止迭代数组。否则,如果 callbackFn
对所有元素都返回真值,则 every()
返回 true
。阅读迭代方法部分以获取有关这些方法如何普遍工作的更多信息。
every
类似于数学中的“对所有”量词。特别是,对于空数组,它返回 true
。(空集的所有元素都满足任何给定条件,这是平凡真)。
callbackFn
仅对已分配值的数组索引调用。它不会为稀疏数组中的空槽调用。
every()
方法是泛型。它只期望 this
值具有 length
属性和整数键属性。
示例
测试所有数组元素的大小
以下示例测试数组中的所有元素是否都大于或等于 10。
js
function isBigEnough(element, index, array) {
return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true
检查一个数组是否是另一个数组的子集
以下示例测试数组的所有元素是否都存在于另一个数组中。
js
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 的第三个参数
如果您想访问数组中的另一个元素,则 array
参数很有用。以下示例首先使用 filter()
提取正值,然后使用 every()
检查数组是否严格递增。
js
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()
不会在其谓词上运行空槽。
js
console.log([1, , 3].every((x) => x !== undefined)); // true
console.log([2, , 2].every((x) => x === 2)); // true
在非数组对象上调用 every()
every()
方法读取 this
的 length
属性,然后访问小于 length
的非负整数键的每个属性,直到所有属性都被访问或 callbackFn
返回 false
。
js
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
规范
规范 |
---|
ECMAScript 语言规范 # sec-array.prototype.every |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。