摘要: 本教程将教你如何使用 JavaScript 数组 some() 方法来检查数组中是否至少有一个元素满足指定的测试条件。
JavaScript 数组 some() 方法简介
有时,你需要检查一个 数组 是否至少包含一个满足特定条件的元素。
例如,要检查以下数组是否至少包含一个小于 5 的元素
let marks = [ 4, 5, 7, 9, 10, 3 ];Code language: JavaScript (javascript)…你通常使用 for 循环,例如
let marks = [ 4, 5, 7, 9, 10, 3 ];
let lessThanFive = false;
for (let index = 0; index < marks.length; index++) {
if (marks[index] < 5) {
lessThanFive = true;
break;
}
}
console.log(lessThanFive);Code language: JavaScript (javascript)输出
trueCode language: JavaScript (javascript)工作原理
- 首先,声明一个标志变量
lessThanFive并将其值设置为false。 - 其次,迭代所有元素。如果元素小于 5,则将标志设置为
true,并使用break语句立即退出循环。
代码按预期工作。但是,它比较冗长。
Array 类型提供了一个名为 some() 的实例方法,允许你测试数组中是否至少有一个元素满足某个条件。
let marks = [ 4, 5, 7, 9, 10, 3 ];
lessThanFive = marks.some(function(e) {
return e < 5;
});
console.log(lessThanFive);
Code language: JavaScript (javascript)输出
true
Code language: JavaScript (javascript)该条件通过传递给 some() 方法的 回调函数 来实现。
现在,代码更短了。为了使代码更具表现力,你可以使用 ES6 中的箭头函数语法
let marks = [ 4, 5, 7, 9, 10, 3 ];
let lessThanFive = marks.some(e => e < 5);
console.log(lessThanFive);Code language: JavaScript (javascript)JavaScript 数组 some() 语法
以下展示了 some() 方法的语法
arrayObject.some(callback[, thisArg]);
Code language: CSS (css)some() 方法接受两个参数
1) 回调参数
some() 函数会对数组中的每个元素执行一次 callback 函数,直到找到 callback 函数返回 true 的元素。some() 方法会立即返回 true 并且不会评估剩余的元素。
如果没有任何元素导致 callback() 返回 true,则 some() 方法会返回 false。
callback 函数接受三个参数
function callback(currentElement [[, currentIndex], array]){ // ...}
Code language: JavaScript (javascript)currentElement是正在数组中处理的当前元素。currentIndex是正在数组中处理的当前元素的索引。array是调用some()的数组。
2) thisArg 参数
thisArg 参数是可选的。如果你将 thisArg 传递给该方法,你可以在 callback 函数内部使用 thisArg 作为 this 值。
JavaScript 数组 some() 示例
让我们来看一些使用 some() 方法的示例。
1) 检查数组中是否存在元素
以下 exists() 函数使用 some() 方法来检查数组中是否存在某个值
function exists(value, array) {
return array.some(e => e === value);
}
let marks = [4, 5, 7, 9, 10, 2];
console.log(exists(4, marks));
console.log(exists(11, marks));
Code language: JavaScript (javascript)输出
true
falseCode language: JavaScript (javascript)2) 检查数组中是否有一个元素在范围内
以下示例展示了如何检查 marks 数组中是否存在任何数字在 (8, 10) 范围内
let marks = [4, 5, 7, 9, 10, 2];
const range = {
min: 8,
max: 10
};
let result = marks.some(function (e) {
return e >= this.min && e <= this.max;
}, range);
console.log(result);
Code language: JavaScript (javascript)输出
trueCode language: JavaScript (javascript)工作原理。
- 首先,定义一个包含 min 和 max 属性的范围对象。
- 其次,在 marks 数组对象上调用
some()方法,并将回调和范围对象传递给它。因为我们将范围对象作为第二个参数 (thisArg) 传递,所以我们可以在回调内部通过this值来引用它。
请注意,如果你在此示例中使用箭头函数,则回调函数内部的 this 值不会绑定到 range 对象,而是绑定到 global 对象。
注意:空数组
如果你在空数组上调用 some() 方法,则无论任何条件,结果始终为 false。例如
let result = [].some(e => e > 0);
console.log(result);
result = [].some(e => e <= 0);
console.log(result);Code language: JavaScript (javascript)输出
false
falseCode language: JavaScript (javascript)在本教程中,你学习了如何使用 JavaScrip Array some() 方法来测试数组中是否至少有一个元素满足某个条件。