В этом руководстве вы узнаете, как использовать метод Array some() массива JavaScript, чтобы проверить, проходит ли тест хотя бы один элемент в массиве.
Иногда вам нужно проверить, есть ли в массиве хотя бы один элемент, удовлетворяющий заданному условию.
Например, чтобы проверить, есть ли в следующем массиве хотя бы один элемент меньше 5:
let marks = [ 4, 5, 7, 9, 10, 3 ];
Вы обычно используете цикл 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);Выход:
true
Как это работает:
- Во-первых, объявите переменную флага
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);
Выход
true
Условие реализуется через функцию обратного вызова, переданную в метод some().
Теперь код короче. Чтобы сделать его более выразительным, вы можете использовать синтаксис стрелочной функции в ES6:
let marks = [ 4, 5, 7, 9, 10, 3 ]; let lessThanFive = marks.some(e => e < 5); console.log(lessThanFive);
Синтаксис метода
Синтаксис:
arrayObject.some(callback[, thisArg]);
Метод some() принимает два аргумента:
1) Аргумент callback
Функция some() выполняет функцию callback один раз для каждого элемента в массиве, пока не найдет тот, в котором функция callback возвращает значение true. Метод немедленно возвращает значение true и не оценивает оставшиеся элементы.
Если ни один элемент не вызывает возврат callback() true, метод some() возвращает false.
Функция callback принимает три аргумента:
function callback(currentElement [[, currentIndex], array]){ // ...}
currentElement— это текущий обрабатываемый элемент в массиве.currentIndex— это индекс текущего обрабатываемого элемента в массиве.array— это массив, к которому был вызван методsome().
2) Аргумент thisArg
Аргумент thisArg является необязательным. Если вы передаете thisArg в метод, вы можете использовать thisArg в качестве значения this внутри функции callback.
Примеры
Давайте рассмотрим несколько примеров использования метода 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));
Выход:
true false
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);
Выход:
true
Как это работает:
- Сначала определите объект диапазона со свойствами min и max.
- Во-вторых, вызовите метод
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);
Выход:
false false
В этом руководстве вы узнали, как использовать метод some() массива JavaScript для проверки наличия в массиве хотя бы одного элемента, удовлетворяющего условию.
