Методы массивов: find, some, every, includes
find,some,every,includes— методы поиска и проверки массивов:findвозвращает первый подходящий элемент,some/everyпроверяют условие на части или всех элементах,includesпроверяет наличие значения.
Зачем нужно
Эти методы делают код декларативным: вместо ручного цикла с флагом found = false вы описываете намерение — «найди элемент», «есть ли хоть один», «все ли». Все они останавливают перебор при первом нужном результате, что эффективнее полного обхода.
Где используется
- Поиск объекта в массиве по условию (
find) - Проверка наличия активного пользователя/элемента (
some) - Валидация — все ли поля заполнены (
every) - Проверка принадлежности к списку разрешённых значений (
includes)
find и findIndex
const users = [
{ id: 1, name: 'Иван', active: false },
{ id: 2, name: 'Мария', active: true },
{ id: 3, name: 'Пётр', active: true },
];
// find — первый элемент, удовлетворяющий условию, или undefined
const activeUser = users.find(u => u.active);
console.log(activeUser); // { id: 2, name: 'Мария', active: true }
const missing = users.find(u => u.id === 99);
console.log(missing); // undefined
// findIndex — индекс первого совпадения, или -1
const idx = users.findIndex(u => u.id === 2);
console.log(idx); // 1
some — есть ли хотя бы один
// Возвращает true при первом совпадении, false если ни одного
const hasActive = users.some(u => u.active);
console.log(hasActive); // true
const hasAdmin = users.some(u => u.role === 'admin');
console.log(hasAdmin); // false
// Практика: проверка прав доступа
const allowedRoles = ['admin', 'moderator'];
const canEdit = (user) => allowedRoles.some(r => user.roles.includes(r));
every — все ли удовлетворяют условию
// Возвращает true если условие выполнено для ВСЕХ, false при первом провале
const allActive = users.every(u => u.active);
console.log(allActive); // false
// Валидация формы
const fields = [
{ value: 'Иван', required: true },
{ value: '', required: true },
{ value: 'test@example.com', required: true },
];
const isFormValid = fields.every(f => !f.required || f.value.trim() !== '');
console.log(isFormValid); // false (второе поле пустое)
includes — прямая проверка по значению
// Использует строгое равенство (===); работает с NaN
const fruits = ['яблоко', 'груша', 'слива'];
console.log(fruits.includes('груша')); // true
console.log(fruits.includes('манго')); // false
// includes с fromIndex
console.log(fruits.includes('яблоко', 1)); // false — ищем с индекса 1
// Поддержка NaN (в отличие от indexOf)
console.log([NaN].includes(NaN)); // true
console.log([NaN].indexOf(NaN)); // -1 (не найдёт!)
// Проверка на допустимые значения
const VALID_STATUSES = ['active', 'pending', 'closed'];
function isValidStatus(s) { return VALID_STATUSES.includes(s); }
Сравнение методов
| Метод | Возвращает | Останавливается | Для чего |
|---|---|---|---|
find |
Элемент или undefined |
При первом совпадении | Найти объект |
findIndex |
Индекс или -1 |
При первом совпадении | Найти индекс |
some |
boolean |
При первом true |
Есть хоть один? |
every |
boolean |
При первом false |
Все подходят? |
includes |
boolean |
При первом === |
Есть значение? |
Частые ошибки
findvsfilter—findвозвращает один элемент,filter— массив; не используйтеfilter(fn)[0]вместоfind(fn).includesдля объектов —[{a:1}].includes({a:1})→false;includesсравнивает по ссылке, не по значению; используйтеsome.- Пустой массив и
every—.every(fn)возвращаетtrue(vacuous truth); учитывайте это при валидации.
Связанные темы
- _MOC JavaScript
- Методы массивов -- map, filter, reduce
- Методы массивов -- push, pop, shift, unshift
- break и continue