JavaScript 数组 every():判断所有数组元素是否通过测试

摘要:在本教程中,您将学习如何使用 JavaScript 数组 every() 方法检查所有数组元素是否通过测试。

使用 for 循环检查数组元素

有时,您需要测试数组中的每个元素是否满足特定条件。

通常,您使用一个 for 循环 来迭代所有元素,并针对条件检查每个单独元素。假设您有一个包含三个元素的数组 numbers

let numbers = [1, 3, 5];Code language: JavaScript (javascript)

以下代码检查 numbers 数组中的每个元素是否大于零

let numbers = [1, 3, 5];
let result = true;
for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] <= 0) {
        result = false;
        break;
    }
}
console.log(result);Code language: JavaScript (javascript)

输出

trueCode language: JavaScript (javascript)

工作原理

  • 首先,将 result 变量初始化为 true
  • 其次,迭代 numbers 数组的元素,并检查每个元素是否小于或等于零。如果是,则将 result 变量设置为 false,并使用 break 语句立即终止循环。如果没有任何元素小于或等于零,则 result 变量的值将保持为 true

这段代码简单明了。但是,它相当冗长。

JavaScript Array 类型提供了 every() 方法,允许您以更短、更简洁的方式检查数组中的每个元素是否通过测试。

JavaScript 数组 every() 方法简介

从 ES5 开始,JavaScript 数组 类型提供了一个名为 every() 的方法,用于测试数组中的每个元素。

以下示例使用 every() 检查 numbers 数组中的每个元素是否大于零

let numbers = [1, 3, 5];
let result = numbers.every(function (e) {
    return e > 0;
});

console.log(result);Code language: JavaScript (javascript)

输出

trueCode language: JavaScript (javascript)

通过使用 ES6 箭头函数,代码可以更短

let numbers = [1, 3, 5];

let result = numbers.every( e  => e > 0);

console.log(result);Code language: JavaScript (javascript)

它也更简洁,不是吗?

以下是 every() 方法的语法。

arrayObject.every(callback[, thisArg])Code language: CSS (css)

every() 方法接受两个命名参数:callbackthisArg

1) callback 参数

callback 是一个函数,用于测试数组中的每个元素。callback() 函数具有以下形式

function callback(currentElement, index, array){
   //...
}Code language: JavaScript (javascript)

callback() 函数接受三个参数

  • 首先,currentElement 是正在处理的当前元素。
  • 其次,indexcurrentElement 的索引。
  • 第三,array 是调用 every() 方法的数组。

currentElement 参数是必需的,而 indexarray 参数是可选的。

2) thisArg 参数

every() 方法的 thisArg 参数是可选的。如果您将 thisArg 参数传递到方法中,则 callback 函数内部的 this 值将引用 thisArg 参数。

如果 callback 函数对每个数组元素都返回一个真值,则 every() 方法返回 true;否则,它返回 false

请注意,every() 方法对数组中的每个元素执行 callback() 函数,直到找到导致 callback() 返回假值的元素。

换句话说,一旦有一个数组元素导致 callback() 返回一个假值,every() 就会停止调用 callback() 函数并返回 false

让我们看一下使用 every() 方法的一些更多示例。

更多 JavaScript 数组 every() 方法示例

以下示例测试所有数组元素是否为偶数

let numbers = [1, 3, 5];
let isEven = numbers.every(function (e) {
    return e % 2 == 0;
});

console.log(isEven);Code language: JavaScript (javascript)

输出

falseCode language: JavaScript (javascript)

相反,以下示例测试所有数组元素是否为奇数。

let numbers = [1, 3, 5];

let isOdd = numbers.every(function (e) {
    return Math.abs(e % 2) == 1;
});

console.log(isOdd);Code language: JavaScript (javascript)

输出

trueCode language: JavaScript (javascript)

假设您有一个包含两个属性的对象:minmax

let range = {
    min: 0,
    mas: 10
};Code language: JavaScript (javascript)

以下示例测试 numbers 数组中的所有元素是否都在 range 对象的 minmax 指定的范围内。

let numbers = [1, 3, 5];

let range = {
    min: 0,
    max: 10
};

let isInRange = numbers.every(function (e) {
    return e >= this.min && e <= this.max;
}, range);Code language: JavaScript (javascript)

输出

trueCode language: JavaScript (javascript)

在此示例中,我们将 range 对象作为第二个参数传递给 every() 方法。在 callback() 函数内部,我们使用 this 关键字引用 range 对象。

注意:空数组

如果您对空数组调用 every() 方法,该方法将始终针对任何条件返回 true。例如

let gtZero = [].every(e => e > 0); // any condition
let ltZero = [].every(e => e < 0); // any condition

console.log('gtZero:', gtZero);
console.log('ltZero:', ltZero);Code language: JavaScript (javascript)

输出

gtZero: true
ltZero: trueCode language: JavaScript (javascript)

在本教程中,您学习了如何使用 JavaScript 数组 every() 方法来测试数组中所有元素是否通过测试函数提供的测试。

本教程是否有帮助?