JS метод Array.findIndex()
Опис
Метод findIndex() надає інструмент для знаходження індексу першого елемента в масиві, який відповідає певній умові. Для цього в нього передається callback-функція. Ця функція має повертати true або false для кожного елемента, залежно від його відповідності заданій умові. Перший елемент, для якого callback-функція поверне true, визначає результат виконання методу findIndex().
Сам метод findIndex() не змінює масив, на якому його викликали. Але важливо пам'ятати, що функція, передана як callbackFn, може вносити зміни в цей масив. При цьому:
callbackFnне буде працювати з елементами, доданими після початку роботи методуfindIndex().- Індекси, які вже були оброблені, при змінах в них не будуть повторно оброблятися
callbackFn. - Якщо елемент масиву, що ще не був оброблений, зміниться в процесі роботи
callbackFn, його значення буде відповідати стану на момент його обробки. Елементи, які були видалені, опрацьовуються якundefined.
Приклад:
let numbers = [5, 12, 8, 130, 44];
let isLargeNumber = (element) => element > 13;
let index = numbers.findIndex(isLargeNumber);
console.log(index); // повертає 3
У цьому прикладі ми шукаємо перший елемент у масиві numbers, який більший ніж 13. Як результат роботи методу ми отримуємо значення 3, бо елемент під індексом 3 (130) є першим, який відповідає умові "більше ніж 13".
| Нотатка: | Якщо немає елементів, що відповідають умові, метод |
| Нотатка: | Метод |
Синтаксис
findIndex(callbackFn)
findIndex(callbackFn, thisArg)
Параметри
- *
callbackFn Функція, яка виконується для кожного елемента масиву. Вона повинна повертати значення істиності (truthy), щоб показати, що був знайдений відповідний елемент, і значення хибності (falsy) у протилежному випадку.
Функція
callbackFnвикликається з наступними аргументами:element: поточний елемент, який обробляється у масиві;index: індекс поточного елемента, який обробляється у масиві;array: масив, на якому було викликано методfindIndex().
thisArgЗначення, яке використовується як
thisпід час виконання функціїcallbackFn.
Return
indexІндекс першого елемента в масиві, який пройшов перевірку. В протилежному випадку,
-1.
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
45 |
25 |
8 |
32 |
12 |
| Переглядач | ||||
|---|---|---|---|---|
45 |
45 |
4 |
8 |
| Переглядач | ||
|---|---|---|
4.0.0 |
1.0 |
Приклади
Приклад використовує метод findIndex() для знаходження індексу першого елемента в масиві, яке є числом більшим за 13. Результат виводиться на сторінку.
Приклад повертає індекс першого елемента в масиві, який є простим числом, або -1, якщо простого числа немає.
function isPrime(element) {
if (element % 2 === 0 || element < 2) {
return false;
}
for (let factor = 3; factor <= Math.sqrt(element); factor += 2) {
if (element % factor === 0) {
return false;
}
}
return true;
}
console.log([4, 6, 8, 9, 12].findIndex(isPrime)); // -1, не знайдено
console.log([4, 6, 7, 9, 12].findIndex(isPrime)); // 2 (елемент array[2] це 7)
Використання findIndex() на розріджених масивах. Ви можете шукати undefined у розрідженому масиві та отримати індекс порожнього слоту.
console.log([1, , 3].findIndex((x) => x === undefined)); // 1
Метод findIndex() зчитує властивість length цього об'єкта та далі отримує доступ до кожної властивості, ключ якої є невід'ємним цілим числом, меншим за length.
const arrayLike = {
length: 3,
"-1": 0.1, // ігнорується findIndex(), оскільки -1 < 0
0: 2,
1: 7.3,
2: 4,
};
console.log(
Array.prototype.findIndex.call(arrayLike, (x) => !Number.isInteger(x)),
); // 1
