摘要: 本教程将教你如何使用 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)
输出
true
Code 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
false
Code 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)
输出
true
Code 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
false
Code language: JavaScript (javascript)
在本教程中,你学习了如何使用 JavaScrip Array some()
方法来测试数组中是否至少有一个元素满足某个条件。