some() в JavaScript
- Синтаксис
- Как работает some()
- Проверка массива объектов
- Если ничего не подошло
- Параметры callback-функции
- Отличие some() от find(), filter() и every()
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().