Метод Array some() в JavaScript

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

Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript