Array.prototype.every()

基线 广泛可用

此功能已得到充分确立,并且可在许多设备和浏览器版本中使用。它自以下时间起在所有浏览器中都可用 2015年7月.

every() 方法是 Array 实例的方法,用于测试数组中的所有元素是否都通过提供的函数实现的测试。它返回一个布尔值。

试一试

语法

js
every(callbackFn)
every(callbackFn, thisArg)

参数

callbackFn

要对数组中的每个元素执行的函数。它应该返回一个真值以指示元素通过测试,否则返回一个假值。该函数使用以下参数调用

元素

数组中当前正在处理的元素。

索引

数组中当前正在处理的元素的索引。

数组

调用 every() 的数组。

thisArg 可选

在执行 callbackFn 时用作 this 的值。请参阅迭代方法

返回值

除非 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() 方法读取 thislength 属性,然后访问小于 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 的浏览器中加载。

另请参阅