findIndex() в JavaScript
- Синтаксис
- Как работает findIndex()
- Поиск индекса объекта
- Если элемент не найден
- Параметры callback-функции
- Отличие findIndex() от find() и indexOf()
findIndex() - это метод массива, который возвращает индекс первого элемента, подходящего под условие.
let numbers = [5, 12, 8, 20];
let index = numbers.findIndex((number) => number > 10);
console.log(index); // 1
Число 12 находится на индексе 1, поэтому метод вернул 1.
Синтаксис
В findIndex() передается callback-функция. Она вызывается для элементов массива по порядку.
let index = array.findIndex((element) => {
return condition;
});
Если callback-функция возвращает true, метод возвращает индекс текущего элемента и прекращает поиск.
let prices = [500, 1200, 800, 3000];
let index = prices.findIndex((price) => {
return price > 1000;
});
console.log(index); // 1
Как работает findIndex()
findIndex() нужен, когда важен не сам элемент, а его позиция в массиве.
let names = ['Анна', 'Олег', 'Мария'];
let index = names.findIndex((name) => name === 'Олег');
console.log(index); // 1
Такой индекс можно использовать, например, чтобы заменить элемент.
if (index !== -1) {
names[index] = 'Игорь';
}
console.log(names); // ['Анна', 'Игорь', 'Мария']
Поиск индекса объекта
Метод хорошо подходит для массивов объектов, когда нужно найти позицию объекта по свойству.
let users = [
{ id: 1, name: 'Анна' },
{ id: 2, name: 'Олег' },
{ id: 3, name: 'Мария' },
];
let index = users.findIndex((user) => user.id === 2);
console.log(index); // 1
Обычный indexOf() для такой задачи не подойдет, потому что он ищет точное значение, а не проверяет свойства объекта.
Если элемент не найден
Если подходящего элемента нет, findIndex() вернет -1.
let users = [
{ id: 1, name: 'Анна' },
{ id: 2, name: 'Олег' },
];
let index = users.findIndex((user) => user.id === 10);
console.log(index); // -1
Поэтому результат обычно сравнивают с -1.
if (index !== -1) {
console.log('Пользователь найден');
}
Не стоит проверять индекс просто через if (index). Если элемент находится на индексе 0, такое условие не сработает.
Параметры callback-функции
Callback-функция в findIndex() может принимать три параметра.
element - текущий элемент массива.
index - индекс текущего элемента.
array - исходный массив.
let numbers = [10, 20, 30, 40];
let index = numbers.findIndex((number, index) => {
return index > 1 && number > 20;
});
console.log(index); // 2
Чаще всего достаточно первого параметра. Индекс используют, когда условие зависит от позиции элемента.
Отличие findIndex() от find() и indexOf()
findIndex() возвращает индекс первого элемента, который подошел под условие.
find() возвращает сам элемент.
indexOf() ищет точное значение и возвращает его индекс.
let users = [
{ id: 1, name: 'Анна' },
{ id: 2, name: 'Олег' },
];
let user = users.find((user) => user.id === 2);
let index = users.findIndex((user) => user.id === 2);
Если нужен объект - используйте find(). Если нужен его индекс - findIndex().