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".

автор: Bond

Нотатка

Якщо немає елементів, що відповідають умові, метод findIndex() поверне -1. Тому важливо перевіряти результат методу на -1, щоб уникнути помилок.

автор: Bond
Нотатка

Метод findIndex() універсальний. Він передбачає, що значення this має властивість length та інші властивості з цілими числовими ключами.

автор: Bond

Синтаксис

findIndex(callbackFn)
findIndex(callbackFn, thisArg)

Параметри

callbackFn

Функція, яка виконується для кожного елемента масиву. Вона повинна повертати значення істиності (truthy), щоб показати, що був знайдений відповідний елемент, і значення хибності (falsy) у протилежному випадку.

Функція callbackFn викликається з наступними аргументами:

  • element: поточний елемент, який обробляється у масиві;
  • index: індекс поточного елемента, який обробляється у масиві;
  • array: масив, на якому було викликано метод findIndex().
автор: Bond

thisArg

Значення, яке використовується як this під час виконання функції callbackFn.

автор: Bond

Повернення

index

Індекс першого елемента в масиві, який пройшов перевірку. В протилежному випадку, -1.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
45 25 8 32 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
45 45 4 8
Підтримка: серверні переглядачі
Переглядач Node.js Deno
4.0.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

Приклад повертає індекс першого елемента в масиві, який є простим числом, або -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)
автор: Bond

Використання findIndex() на розріджених масивах. Ви можете шукати undefined у розрідженому масиві та отримати індекс порожнього слоту.

console.log([1, , 3].findIndex((x) => x === undefined)); // 1
автор: Bond

Приклад використовує метод findIndex() для знаходження індексу першого елемента в масиві, яке є числом більшим за 13. Результат виводиться на сторінку.

автор: Bond

Метод 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
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід