JavaScript 数组 some: 检查数组中是否至少有一个元素满足测试条件

摘要: 本教程将教你如何使用 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() 方法来测试数组中是否至少有一个元素满足某个条件。

本教程对您有帮助吗?