some() в JavaScript

some() - это метод массива, который проверяет, есть ли в массиве хотя бы один элемент, подходящий под условие.

let numbers = [5, 8, 12, 3];

let result = numbers.some((number) => number > 10);

console.log(result); // true

В массиве есть число больше 10, поэтому результатом будет true.

Синтаксис

В some() передается callback-функция. Она вызывается для элементов массива по порядку.

let result = array.some((element) => {
  return condition;
});

Если callback-функция хотя бы один раз вернула true, метод сразу возвращает true.

let prices = [500, 800, 1200];

let hasExpensivePrice = prices.some((price) => {
  return price > 1000;
});

console.log(hasExpensivePrice); // true

Как работает some()

some() нужен, когда важен не сам элемент, а ответ: есть подходящий элемент или нет.

let roles = ['user', 'editor', 'admin'];

let hasAdmin = roles.some((role) => role === 'admin');

console.log(hasAdmin); // true

Метод останавливается на первом элементе, который прошел проверку. Дальше массив уже не перебирается.

Проверка массива объектов

Часто some() используют с массивом объектов. Например, чтобы проверить, есть ли активный пользователь.

let users = [
  { name: 'Анна', active: false },
  { name: 'Олег', active: true },
  { name: 'Мария', active: false },
];

let hasActiveUser = users.some((user) => user.active);

console.log(hasActiveUser); // true

Здесь user.active уже содержит true или false, поэтому отдельное сравнение можно не писать.

Если ничего не подошло

Если ни один элемент не прошел проверку, some() вернет false.

let numbers = [1, 2, 3];

let result = numbers.some((number) => number > 10);

console.log(result); // false

Для пустого массива результат тоже будет false, потому что в нем нет ни одного подходящего элемента.

let result = [].some((item) => item > 10);

console.log(result); // false

Параметры callback-функции

Callback-функция в some() может принимать три параметра.

element - текущий элемент массива.

index - индекс текущего элемента.

array - исходный массив.

let numbers = [10, 20, 30, 40];

let result = numbers.some((number, index) => {
  return index > 1 && number > 20;
});

console.log(result); // true

Чаще всего достаточно первого параметра. Индекс используют только если условие зависит от позиции элемента.

Отличие some() от find(), filter() и every()

some() возвращает true или false.

find() возвращает сам первый подходящий элемент.

filter() возвращает массив всех подходящих элементов.

every() проверяет, подходят ли все элементы.

let users = [
  { name: 'Анна', active: true },
  { name: 'Олег', active: false },
];

let hasActiveUser = users.some((user) => user.active);
let firstActiveUser = users.find((user) => user.active);
let activeUsers = users.filter((user) => user.active);
let allActiveUsers = users.every((user) => user.active);

Если нужен только ответ «есть или нет» - используйте some().