В этом руководстве вы узнаете, как использовать метод 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 для проверки наличия в массиве хотя бы одного элемента, удовлетворяющего условию.