Spec-Zone.ru › JavaScript

Array.prototype.findIndex()

Baseline Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2016 года.

Метод findIndex() экземпляров Array возвращает индекс первого элемента в массиве, который соответствует предоставленной тестовой функции. Если ни один элемент не соответствует тестовой функции, возвращается -1.

См. также метод find(), который возвращает первый элемент, соответствующий тестовой функции (а не его индекс).

Попробуйте

const array = [5, 12, 8, 130, 44];

const isLargeNumber = (element) => element > 13;

console.log(array.findIndex(isLargeNumber));
// Expected output: 3

Синтаксис

findIndex(callbackFn)
findIndex(callbackFn, thisArg)

Параметры

callbackFn
Функция, которая будет выполнена для каждого элемента в массиве. Она должна возвращать истинное (truthy) значение, чтобы указать на найденное совпадение, и ложное (falsy) значение в противном случае. Функция вызывается со следующими аргументами:
element
Текущий элемент, обрабатываемый в массиве.
index
Индекс текущего элемента, обрабатываемого в массиве.
array
Массив, для которого был вызван findIndex().
thisArg Необязательный
Значение, используемое как this при выполнении callbackFn. См. итерационные методы.

Возвращаемое значение

Индекс первого элемента в массиве, который прошел проверку. В противном случае — -1.

Описание

Метод findIndex() является итерационным методом. Он вызывает предоставленную функцию callbackFn один раз для каждого элемента в массиве в порядке возрастания индексов, пока callbackFn не вернет истинное (truthy) значение. Затем findIndex() возвращает индекс этого элемента и прекращает итерацию по массиву. Если callbackFn никогда не возвращает истинное значение, findIndex() возвращает -1. Читайте раздел итерационные методы для получения дополнительной информации о том, как эти методы работают в целом.

callbackFn вызывается для *каждого* индекса массива, а не только для тех, которым присвоены значения. Пустые слоты в разреженных массивах ведут себя так же, как undefined.

Метод findIndex() является общим. Он ожидает, что значение this будет иметь свойство length и целочисленные свойства.

Примеры

Найти индекс первого простого числа в массиве

Следующий пример возвращает индекс первого элемента в массиве, который является простым числом, или -1, если простых чисел нет.

function isPrime(n) {
  if (n < 2) {
    return false;
  }
  if (n % 2 === 0) {
    return n === 2;
  }
  for (let factor = 3; factor * factor <= n; factor += 2) {
    if (n % factor === 0) {
      return false;
    }
  }
  return true;
}

console.log([4, 6, 8, 9, 12].findIndex(isPrime)); // -1, not found
console.log([4, 6, 7, 9, 12].findIndex(isPrime)); // 2 (array[2] is 7)

Примечание: Реализация isPrime() предназначена только для демонстрации. Для реального приложения вы захотите использовать сильно мемоизированный алгоритм, такой как решето Эратосфена, чтобы избежать повторных вычислений.

Использование третьего аргумента callbackFn

Аргумент array полезен, если вы хотите получить доступ к другому элементу в массиве, особенно когда у вас нет существующей переменной, ссылающейся на массив. Следующий пример сначала использует filter() для извлечения положительных значений, а затем использует findIndex() для поиска первого элемента, который меньше своих соседей.

const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const firstTrough = numbers
  .filter((num) => num > 0)
  .findIndex((num, idx, arr) => {
    // Without the arr argument, there's no way to easily access the
    // intermediate array without saving it to a variable.
    if (idx > 0 && num >= arr[idx - 1]) return false;
    if (idx < arr.length - 1 && num >= arr[idx + 1]) return false;
    return true;
  });
console.log(firstTrough); // 1

Использование findIndex() на разреженных массивах

Вы можете искать undefined в разреженном массиве и получить индекс пустого слота.

console.log([1, , 3].findIndex((x) => x === undefined)); // 1

Вызов findIndex() на объектах, не являющихся массивами

Метод findIndex() считывает свойство length this, а затем получает доступ к каждому свойству, ключ которого является неотрицательным целым числом, меньшим length.

const arrayLike = {
  length: 3,
  "-1": 0.1, // ignored by findIndex() since -1 < 0
  0: 2,
  1: 7.3,
  2: 4,
};
console.log(
  Array.prototype.findIndex.call(arrayLike, (x) => !Number.isInteger(x)),
); // 1

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-array.prototype.findindex

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS Bun Deno Node.js
findIndex
45
12
25
32
8
45
4
32
8
5.0
45
8
1.0.0
1.0
4.0.0

См. также

  • Polyfill для Array.prototype.findIndex в core-js
  • Polyfill es-shims для Array.prototype.findIndex
  • Руководство по индексированным коллекциям
  • Array
  • Array.prototype.find()
  • Array.prototype.findLast()
  • Array.prototype.findLastIndex()
  • Array.prototype.indexOf()
  • Array.prototype.lastIndexOf()
  • TypedArray.prototype.findIndex()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API