Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
Array.prototype.findIndex()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since septiembre de 2015.
El métodofindIndex() devuelve elíndice delprimer elemento de un array que cumpla con la función de prueba proporcionada. En caso contrario devuelve -1.
In this article
Pruébalo
const array1 = [5, 12, 8, 130, 44];const isLargeNumber = (element) => element > 13;console.log(array1.findIndex(isLargeNumber));// Expected output: 3Vea también el métodofind(), que devuelve elvalor de un elemento encontrado en el array en lugar de su índice.
Sintaxis
arr.findIndex(callback( element[, index[, array]] )[, thisArg])
Parámetros
callbackFunción a ejecutar en cada uno de los valores del array hasta que devuelve
true, indicando que el elemento que la cumple fue encontrado.Recibe tres argumentos:_element_ : El elemento actual siendo procesado en el array.indexOpcionalEl índice del elemento actual que está siendo procesado en el array.
arrayOpcionalEl array
findIndex()de donde fue llamado.
thisArgOpcionalObjeto opcional para usar como
thiscuando se ejecuta elcallback.
Valor devuelto
Un índice en el array si un elemento pasa la prueba; en caso contrario,-1.
Descripción
El métodofindIndex() ejecuta la función decallback una vez por cada índice del array hasta que encuentre uno dondecallback devuelva un valor verdadero (eso es, un valor quefuerza untrue).
Si dicho elemento es encontrado,findIndex() inmediatamente devuelve el índice del elemento. Si la funcióncallback nunca devuelve un valor verdadero (o el tamaño del array es 0),findIndex devuelve-1.
Nota:A diferencia de otros métodos de arrays comoArray.some(),callback se ejecuta incluso en índices sin valores asignados.
callback se invoca con tres argumentos:
- El valor del elemento
- El índice del elemento
- El Array que será recorrido.
Si el parámetrothisArg es provisto a findIndex, entonces será usado como el this para cada invocación delcallback. Si no es provisto, entoncesundefined será utilizado.
El rango de elementos procesados porfindIndex() se establece antes de la primera invocación de la funcióncallback. Los elementos añadidos al array después de que la llamada afindIndex() comience no serán visitados por elcallback. Si un elemento existente que no ha sido visitado en el array es modificado por elcallback, el valor pasado alcallback que lo visite será el valor en el momento en quefindIndex() visite el índice del elemento.
Los elementoseliminados aún son visitados.
Ejemplos
>Encontrar el índice de un número primo en un array
El siguiente ejemplo encuentra el índice de un elemento en el array que sea número primo (o devuelve-1 si no hay ningún número primo).
function isPrime(element, index, array) { var start = 2; while (start <= Math.sqrt(element)) { if (element % start < 1) { return false; } else { start++; } } return element > 1;}console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, no encontradoconsole.log([4, 6, 7, 12].findIndex(isPrime)); // 2Encontrar un índice utilizando funciones flecha
El siguiente ejemplo encuentra el índice de una fruta utilizando funciones flecha.
const fruits = ["apple", "banana", "cantaloupe", "blueberries", "grapefruit"];const index = fruits.findIndex((fruit) => fruit === "blueberries");console.log(index); // 3console.log(fruits[index]); // blueberriesPolyfill
// https://tc39.github.io/ecma262/#sec-array.prototype.findIndexif (!Array.prototype.findIndex) { Object.defineProperty(Array.prototype, "findIndex", { value: function (predicate) { // 1. Let O be ? ToObject(this value). if (this == null) { throw new TypeError('"this" is null or not defined'); } var o = Object(this); // 2. Let len be ? ToLength(? Get(O, "length")). var len = o.length >>> 0; // 3. If IsCallable(predicate) is false, throw a TypeError exception. if (typeof predicate !== "function") { throw new TypeError("predicate must be a function"); } // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. var thisArg = arguments[1]; // 5. Let k be 0. var k = 0; // 6. Repeat, while k < len while (k < len) { // a. Let Pk be ! ToString(k). // b. Let kValue be ? Get(O, Pk). // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). // d. If testResult is true, return k. var kValue = o[k]; if (predicate.call(thisArg, kValue, k, o)) { return k; } // e. Increase k by 1. k++; } // 7. Return -1. return -1; }, configurable: true, writable: true, });}Si necesita soporte para motores de JavaScript obsoletos que no soportanObject.defineProperty es mejor no emplear polyfills para métodosArray.prototype, ya que no puede hacerlos no-enumerables.
Especificaciones
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype.findindex> |