Поиск в массиве: 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

Сравнение методов

Метод

Что ищет

Возвращает

indexOf(v)

значение (строго)

индекс или -1

includes(v)

значение (строго)

true / false

find(fn)

по условию колбэка

элемент или undefined

findIndex(fn)

по условию колбэка

индекс или -1

Для поиска среди объектов используйте find / findIndex — они принимают функцию-условие. Для простых значений (число, строка) достаточно includes.

Коротко

  • indexOf(v) — индекс первого вхождения значения, -1 если не найдено.
  • includes(v) — булев ответ «есть ли элемент в массиве».
  • find(fn) — первый элемент, удовлетворяющий условию (или undefined).
  • findIndex(fn) — индекс первого подходящего элемента (или -1).
Проверьте себя
1. Что вернёт indexOf, если элемент не найден?
Anull
Bfalse
C-1
Dundefined
2. Какой метод лучше использовать для поиска объекта по условию?
AindexOf
Bincludes
Cfind
Dfilter
3. Что вернёт find, если ни один элемент не удовлетворяет условию?
A-1
Bnull
Cfalse
Dundefined
Поддержать проект