摘要:在本教程中,您将学习如何使用 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() 方法接受两个命名参数:callback 和 thisArg。
1) callback 参数
callback 是一个函数,用于测试数组中的每个元素。callback() 函数具有以下形式
function callback(currentElement, index, array){
//...
}Code language: JavaScript (javascript)callback() 函数接受三个参数
- 首先,
currentElement是正在处理的当前元素。 - 其次,
index是currentElement的索引。 - 第三,
array是调用every()方法的数组。
currentElement 参数是必需的,而 index 和 array 参数是可选的。
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)假设您有一个包含两个属性的对象:min 和 max
let range = {
min: 0,
mas: 10
};Code language: JavaScript (javascript)以下示例测试 numbers 数组中的所有元素是否都在 range 对象的 min 和 max 指定的范围内。
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() 方法来测试数组中所有元素是否通过测试函数提供的测试。