findIndex() ищет индекс первого элемента массива, который подходит под условие.
Как только подходящий элемент найден, метод сразу останавливается и возвращает его индекс.
Синтаксис
array.findIndex(callback)
array.findIndex(callback, thisArg)
callback - функция, которая проверяет каждый элемент массива.
Что делает findIndex()
Метод проходит по массиву слева направо и вызывает callback для каждого элемента.
Если callback возвращает true, метод считает элемент найденным и возвращает его индекс.
const numbers = [5, 12, 8, 130];
const result = numbers.findIndex((value) => value > 10);
console.log(result); // 1
Здесь индекс 1, потому что первым подходящим элементом оказался 12.
Что возвращает findIndex()
findIndex() возвращает:
- индекс первого подходящего элемента, если он найден
-1, если ничего не найдено
const numbers = [1, 2, 3];
console.log(numbers.findIndex((value) => value > 2)); // 2
console.log(numbers.findIndex((value) => value > 10)); // -1
Это главное, что нужно запомнить про метод.
Аргументы callback
Callback в findIndex() может получать до трёх аргументов:
array.findIndex((element, index, array) => {
// ...
});
element- текущий элементindex- индекс текущего элементаarray- сам исходный массив
Пример:
const fruits = ["apple", "banana", "orange"];
const result = fruits.findIndex((fruit, index) => {
return index === 1;
});
console.log(result); // 1
Поиск объекта по условию
findIndex() часто используют, когда нужно найти позицию объекта в массиве.
const users = [
{ id: 1, name: "Anna" },
{ id: 2, name: "Ivan" },
];
const index = users.findIndex((item) => item.id === 2);
console.log(index); // 1
Это полезно, если потом нужно обновить или удалить элемент по индексу.
findIndex() останавливается на первом совпадении
Как только найден первый подходящий элемент, дальше массив уже не проверяется.
const numbers = [2, 4, 6, 8];
const result = numbers.findIndex((value) => value > 3);
console.log(result); // 1
Хотя 6 и 8 тоже подходят, метод возвращает только индекс первого совпадения.
findIndex() и find()
Эти методы очень похожи, но возвращают разное.
const numbers = [10, 20, 30];
console.log(numbers.find((value) => value === 20)); // 20
console.log(numbers.findIndex((value) => value === 20)); // 1
find() возвращает сам элемент.
findIndex() возвращает его индекс.
findIndex() и indexOf()
indexOf() ищет точное значение.
findIndex() ищет по условию.
const numbers = [10, 20, 30];
console.log(numbers.indexOf(20)); // 1
console.log(numbers.findIndex((value) => value > 15)); // 1
Если нужно гибкое условие, обычно используют именно findIndex().
findIndex() не меняет исходный массив
Метод только ищет индекс и не изменяет сам массив.
const numbers = [1, 2, 3];
const result = numbers.findIndex((value) => value === 2);
console.log(numbers); // [1, 2, 3]
console.log(result); // 1
Пустые слоты
findIndex() проходит и по пустым слотам массива, где значение будет undefined.
const arr = Array(3);
const result = arr.findIndex((value) => value === undefined);
console.log(result); // 0
Это важно помнить при работе с массивами, созданными через Array(length).
Когда это полезно
findIndex() удобно использовать, когда:
- нужен индекс первого подходящего элемента
- нужно найти позицию объекта в массиве
- потом планируется обновление или удаление по индексу
Пример:
const products = [
{ id: 1, name: "Phone" },
{ id: 2, name: "Laptop" },
];
const index = products.findIndex((item) => item.name === "Laptop");
console.log(index); // 1
Частые ошибки
Думать, что findIndex() возвращает элемент
const numbers = [1, 2, 3];
const result = numbers.findIndex((value) => value > 1);
console.log(result); // 1
Это индекс, а не значение 2.
Путать findIndex() и indexOf()
const users = [{ id: 1 }, { id: 2 }];
const index = users.findIndex((user) => user.id === 2);
Для поиска по условию indexOf() уже не подходит.
Забывать, что при отсутствии результата будет -1
const numbers = [1, 2, 3];
console.log(numbers.findIndex((value) => value > 10)); // -1
Это нормальный результат, а не ошибка.
Быстрая памятка
findIndex()возвращает индекс первого элемента, подходящего под условие- если ничего не найдено, метод вернёт
-1 - callback может получать
element,indexиarray findIndex()останавливается на первом совпаденииfind()возвращает элемент, аfindIndex()- его индекс
Коротко
findIndex() - это удобный способ найти позицию первого подходящего элемента массива. Главное, что стоит запомнить: метод возвращает индекс, а если ничего не найдено, отдаёт -1.