英文 | https://www.javascripttutorial.net/
译文 | 杨小爱
在上节,我们学习如何使用 JavaScript 数组 indexOf() 和 lastIndexOf() 方法来查找数组中元素的位置,错过的小伙伴可以点击文章《 【JavaScript 教程】第六章 数组07— index() :在数组中定位一个元素》进行学习。
那么,在今天的教程中,我们一起来学习如何使用 JavaScript Array every() 方法检查所有数组元素是否通过测试。
使用 for 循环检查数组元素
有时,您需要测试数组的每个元素是否满足指定条件。
通常,我们使用 for 循环迭代所有元素并根据条件检查每个单独的元素。假设您有一个包含三个元素的数组 numbers:
let numbers = [1, 3, 5];
以下代码检查 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);
输出:
true
程序怎么运行:
首先,将结果变量初始化为 true。
其次,遍历 numbers 数组的元素并检查每个元素是否小于或等于零。如果是这种情况,请将结果变量设置为 false 并使用 break 语句立即终止循环。如果没有元素小于或等于零,则结果变量的值保持为true。
这段代码简单直接。但是,它非常冗长。
JavaScript Array 类型提供了 every() 方法,该方法允许您以更短、更简洁的方式检查数组的每个元素是否通过测试。
JavaScript Array every() 方法简介
从 ES5 开始,JavaScript Array 类型提供了一个方法 every() 来测试数组中的每个元素。
以下示例使用 every() 检查 numbers 数组的每个元素是否大于零:
let numbers = [1, 3, 5];
let result = numbers.every(function (e) {
return e > 0;
});
console.log(result);
输出:
true
通过使用ES6 箭头函数,代码可以更短:
let numbers = [1, 3, 5];
let result = numbers.every( e => e > 0);
console.log(result);
它也干净多了,不是吗?
下面说明了every()方法的语法。
arrayObject.every(callback[, thisArg])
every() 方法接受两个命名参数:callback 和 thisArg。
1) 回调参数
回调是一个测试数组每个元素的函数。callback() 函数具有以下形式:
function callback(currentElement, index, array){
//...
}
callback() 函数接受三个参数:
首先,currentElement 是正在处理的当前元素。
其次,索引是currentElement的索引。
第三,数组是调用 every() 方法的数组。
currentElement 参数是必需的,而索引和数组参数是可选的。
2) thisArg 参数
every() 方法的 thisArg 参数是可选的。如果将 thisArg 参数传递给方法,回调函数中的 this 值将引用 thisArg 参数。
如果回调函数为每个数组元素返回一个真值,every() 方法返回 true;否则,它返回 false。
请注意,every() 方法对数组中的每个元素执行 callback() 函数,直到找到导致 callback() 返回错误值的元素。
换句话说,every() 将停止调用 callback() 函数,并在存在导致 callback() 返回错误值的数组元素时返回 false。
让我们看一下使用 every() 方法的更多示例。
更多 JavaScript Array every() 方法示例
下面的例子测试是否所有的数组元素都是偶数
let numbers = [1, 3, 5];
let isEven = numbers.every(function (e) {
return e % 2 == 0;
});
console.log(isEven);
输出:
false
相反,以下示例测试是否所有数组元素都是奇数。
let numbers = [1, 3, 5];
let isOdd = numbers.every(function (e) {
return Math.abs(e % 2) == 1;
});
console.log(isOdd);
输出:
true
假设您有一个具有两个属性的对象:min和max:
let range = {
min: 0,
mas: 10
};
下面的示例测试 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);
输出:
true
在这个例子中,我们将 range 对象作为第二个参数传递给 every() 方法。在 callback() 函数中,我们使用 this 关键字引用范围对象。
注意:空数组
如果在空数组上调用 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);
输出:
gtZero: true
ltZero: true
在本教程中,我们学习了如何使用 JavaScript Array every() 方法来测试数组中的所有元素是否都通过了测试函数提供的测试。
学习更多技能
请点击下方公众号