JavaScript 数组 every() 方法

JavaScript every() 语法

every() 是 JavaScript 数组的一个方法,它用于判断所有的数组元素是否都能通过给定的测试函数。

语法:

arr.every(callbackFn, thisArg)

说明:

every() 方法可以接收以下 2 个参数。

  • callbackFn(必选):是一个回调函数,每一个数组元素都会经过它的检查。
  • thisArg(可选):回调函数 this 的值,默认值为 undefined。该参数一般不需要手动设置。

callbackFn 这个回调函数的形式如下:

function (element, index, array) {
    ……
}

callbackFn 回调函数接收 3 个参数,说明如下。

  • element(必选):表示当前处理的数组元素。
  • index(可选):表示当前元素的下标。
  • array(可选):表示当前数组(代表的是整个数组)。

every() 不会为没有值的数组元素(即稀疏数组中的空槽元素)执行 callback 函数。

every() 方法最终会返回一个布尔值。只有当数组所有元素都能通过给定的测试函数,every() 才会返回 true;只要有一个数组元素无法通过给定的测试函数,every() 都会返回 false。

every() 方法在检测到第一个不满足条件的元素时会立即停止遍历(短路),这在处理大型数组时效率很高。

注意: 空数组使用 every(),返回的结果一定是 true(因为 “所有元素” 这个条件在空数组中被认为是真)。

JavaScript every() 摘要

属于 JavaScript Array 对象
使用频率
修改原数组
官方文档 查看
MDN 查看

JavaScript every() 示例

接下来,我们通过几个简单的例子来讲解一下 JavaScript every() 方法是如何使用的。

示例 1:every() 基本用法

function isEven(element) {
    return element % 2 === 0;
}
const nums = [2, 4, 6, 7, 8];
const result = nums.every(isEven);
console.log(result);

运行结果如下。

false

分析:

在这个例子中,自定义了一个 isEven() 函数,用于判断某个值是否为偶数。然后将 isEven() 作为 every() 的回调函数。由于数组 nums 中 “7” 并不符合条件,因此 nums.every(isEven) 返回 false。

当然了,我们还可以直接在 every() 方法中使用箭头函数来实现(推荐)。上面例子等价于:

const nums = [2, 4, 6, 7, 8];
const result = nums.every((element) => {
    return element % 2 ===0;
});
console.log(result);

上面的箭头函数还可以进一步简写为下面代码,只是说下面这种方式的可读性较差(更适合老手使用)。

const nums = [2, 4, 6, 7, 8];
const result = nums.every(element => element %2 ===0);
console.log(result);

示例 2:空数组使用 every()

const nums = [];
const result = nums.every((element) => {
    return element % 2 ===0;
});
console.log(result);

运行结果如下。

true

分析:

空数组使用 every() 方法,结果返回的一定是 true,这是一个很重要的结论。

示例 3:every() 的更多使用

const arr = [3, 9, 1, 12, 50, 21];
const result = arr.every(element => element > 10); 
console.log(result);

控制台输出如下:

false

分析:

在这个例子中,我们使用 every() 方法来判断 arr 所有数组元素是否都大于 10,因此返回 false。

示例 4:判断一个数组是否为另一个数组的子集

function checkSubset(arr1, arr2) {
    return arr1.every(element => arr2.includes(element));
}

const arr1 = [1, 2];
const arr2 = [1, 2, 3, 4, 5];
console.log(checkSubset(arr1, arr2));

运行结果如下。

true

分析:

在上面例子中,我们使用了 every() 结合 includes() 来判断一个数组是否为另一个数组的子集。

every() 与 some()、filter() 的区别

every()、some()filter() 这 3 个方法非常相似它们的区别如下。

  • every():用于判断数组中所有元素是否都满足某个条件,返回的是一个 “布尔值” 。如果全部都满足,那么就返回 true;只要有一个不满足,那么就返回 false。
  • some():用于判断数组中是否存在一个元素满足某个条件,返回的是一个 “布尔值” 。只要有一个满足,那么就返回 true;只有全部都不满足,才会返回 false。
  • filter():用于从数组中筛选出所有满足某个条件的元素,返回的是一个 “新数组” 。如果回调函数对当前元素返回 true,则该元素会被包含在新数组中。如果回调函数对当前元素返回 false,则该元素会被排除在新数组之外。

其中,every() 方法类似于 “与运算”,而 some() 方法类似于 “或运算”。小伙伴们这样去对比,会更容易理解和记忆。

在实际开发中,至于选择使用哪个方法,这个取决于你的开发需求。

  • 如果你需要确认所有元素都符合条件,则推荐使用 every()。
  • 如果你只需要确认至少一个元素符合条件,则推荐使用 some()。
  • 如果你需要获取所有符合条件的元素到一个新数组中,则推荐使用 filter()。

上一篇: findLastIndex()

下一篇: some()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号