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