Learn JavaScript

some() - метод для проверки массива на наличие подходящего элемента в JavaScript

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

Как только такой элемент найден, метод сразу останавливается и возвращает true.

Синтаксис

array.some(callback)
array.some(callback, thisArg)

callback - функция, которая проверяет каждый элемент массива.

Что делает some()

Метод проходит по массиву слева направо и вызывает callback для каждого элемента.

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

const numbers = [1, 2, 3, 4];
const result = numbers.some((value) => value > 3);

console.log(result); // true

Здесь метод вернул true, потому что в массиве есть элементы больше 3.

Что возвращает some()

some() всегда возвращает булево значение:

  • true, если найден хотя бы один подходящий элемент
  • false, если ни один элемент не подошёл
const numbers = [1, 2, 3];

console.log(numbers.some((value) => value > 2));  // true
console.log(numbers.some((value) => value > 10)); // false

Аргументы callback

Callback в some() может получать до трёх аргументов:

array.some((element, index, array) => {
  // ...
});
  • element - текущий элемент
  • index - индекс текущего элемента
  • array - сам исходный массив

Пример:

const fruits = ["apple", "banana", "orange"];

const result = fruits.some((fruit, index) => {
  return index === 1;
});

console.log(result); // true

some() останавливается на первом совпадении

Как только найден подходящий элемент, дальше массив уже не проверяется.

const numbers = [2, 4, 6, 8];
const result = numbers.some((value) => value > 3);

console.log(result); // true

Хотя под условие подходят сразу несколько элементов, методу достаточно одного.

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

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

const users = [
  { name: "Anna", active: false },
  { name: "Ivan", active: true },
];

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

console.log(hasActiveUser); // true

Это один из самых типичных сценариев использования метода.

some() не меняет исходный массив

Метод только проверяет элементы и не изменяет массив.

const numbers = [1, 2, 3];
const result = numbers.some((value) => value === 2);

console.log(numbers); // [1, 2, 3]
console.log(result);  // true

some() и every()

Эти методы похожи, но отвечают на разные вопросы.

const numbers = [2, 4, 6];

console.log(numbers.some((value) => value > 4));  // true
console.log(numbers.every((value) => value > 4)); // false

some() проверяет, есть ли хотя бы одно совпадение.

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

some() и filter()

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

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

const numbers = [1, 2, 3, 4];

console.log(numbers.some((value) => value > 2));   // true
console.log(numbers.filter((value) => value > 2)); // [3, 4]

Если нужна просто проверка, some() обычно лучше.

Пустой массив

Для пустого массива some() всегда возвращает false.

const result = [].some((value) => value > 0);

console.log(result); // false

Это логично: в пустом массиве нет ни одного элемента, который мог бы подойти.

Пустые слоты

some() пропускает пустые слоты массива.

const arr = Array(3);
const result = arr.some((value) => value === undefined);

console.log(result); // false

Callback здесь вообще не вызовется.

Когда это полезно

some() удобно использовать, когда:

  • нужно быстро проверить наличие хотя бы одного совпадения
  • не нужен сам элемент или его индекс
  • нужно проверить массив объектов по условию

Пример:

const products = [
  { name: "Phone", inStock: false },
  { name: "Laptop", inStock: true },
];

const hasInStock = products.some((item) => item.inStock);

console.log(hasInStock); // true

Частые ошибки

Думать, что some() возвращает найденный элемент

const numbers = [1, 2, 3];
const result = numbers.some((value) => value > 1);

console.log(result); // true

Это булево значение, а не 2 или 3.

Путать some() и filter()

const numbers = [1, 2, 3, 4];

console.log(numbers.some((value) => value > 2)); // true

Если нужны сами элементы, нужен не some(), а filter().

Забывать, что пустые слоты пропускаются

const arr = Array(2);

console.log(arr.some((value) => value === undefined)); // false

Callback здесь не выполняется для пустых слотов.

Быстрая памятка

  • some() проверяет, есть ли хотя бы один подходящий элемент
  • метод возвращает true или false
  • some() останавливается на первом совпадении
  • исходный массив не меняется
  • every() проверяет все элементы, а some() - наличие хотя бы одного совпадения

Коротко

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