Поиск в массиве: find, findIndex, includes, indexOf
find, findIndex, includes, indexOf — поиск элементов в массиве JavaScript: как найти элемент, его позицию и проверить наличие.
Методы поиска позволяют находить элементы в массиве по значению или условию — без написания цикла вручную.
indexOf — позиция по значению
indexOf(value) возвращает индекс первого вхождения указанного значения или -1, если элемент не найден. Сравнение строгое (===).
const fruits = ['яблоко', 'банан', 'вишня', 'банан'];
console.log(fruits.indexOf('банан')); // 1 — первое вхождение
console.log(fruits.indexOf('груша')); // -1 — не найдено
console.log(fruits.indexOf('банан', 2)); // 3 — поиск начиная с индекса 2
Вывод:
1 -1 3
includes — проверка наличия
includes(value) возвращает true, если элемент есть в массиве, и false — если нет. Удобнее, чем сравнивать indexOf !== -1.
const allowed = ['admin', 'editor', 'moderator'];
const role = 'editor';
if (allowed.includes(role)) {
console.log('Доступ разрешён');
} else {
console.log('Доступ запрещён');
}
console.log(allowed.includes('guest')); // false
Вывод:
Доступ разрешён false
find — элемент по условию
find(fn) возвращает первый элемент, для которого колбэк вернул true. Если ничего не найдено — undefined. Особенно удобен для поиска объектов.
const users = [
{ id: 1, name: 'Аня' },
{ id: 2, name: 'Боря' },
{ id: 3, name: 'Вика' },
];
const user = users.find(u => u.id === 2);
console.log(user); // { id: 2, name: 'Боря' }
console.log(user.name); // Боря
const missing = users.find(u => u.id === 99);
console.log(missing); // undefined
Вывод:
{ id: 2, name: 'Боря' }
Боря
undefined
findIndex — индекс по условию
findIndex(fn) возвращает индекс первого подходящего элемента или -1. Полезен, когда нужно найти позицию, а не сам объект.
const products = [
{ name: 'ручка', stock: 5 },
{ name: 'тетрадь', stock: 0 },
{ name: 'линейка', stock: 3 },
];
const emptyIdx = products.findIndex(p => p.stock === 0);
console.log(emptyIdx); // 1
// можно использовать для замены элемента
if (emptyIdx !== -1) {
products[emptyIdx].stock = 10;
}
console.log(products[1].stock); // 10
Вывод:
1 10
Сравнение методов
Метод | Что ищет | Возвращает |
| значение (строго) | индекс или |
| значение (строго) |
|
| по условию колбэка | элемент или |
| по условию колбэка | индекс или |
Для поиска среди объектов используйте
find/findIndex— они принимают функцию-условие. Для простых значений (число, строка) достаточноincludes.
Коротко
indexOf(v)— индекс первого вхождения значения,-1если не найдено.includes(v)— булев ответ «есть ли элемент в массиве».find(fn)— первый элемент, удовлетворяющий условию (илиundefined).findIndex(fn)— индекс первого подходящего элемента (или-1).