摘要:在本教程中,您将学习如何使用 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)
输出
true
Code 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)
输出
true
Code 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)
输出
false
Code 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)
输出
true
Code 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)
输出
true
Code 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: true
Code language: JavaScript (javascript)
在本教程中,您学习了如何使用 JavaScript 数组 every()
方法来测试数组中所有元素是否通过测试函数提供的测试。