MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

 

El método findIndex() devuelve el índice del primer elemento de un array que cumpla con la función de prueba proporcionada. En caso contrario devuelve -1.

function isBigEnough(element) {
  return element >= 15;
}

[12, 5, 8, 130, 44].findIndex(isBigEnough); // 3

Vea también el método find(), que devuelve el valor  de un elemento encontrado en el array en lugar de su índice.

Sintaxis

arr.findIndex(callback[, thisArg])

Parámetros

callback
Función a ejecutar en cada uno de los valores del array, tomando tres argumentos:
element
El elemento actual siendo procesado en el array.
index
El índice del elemento actual que está siendo procesado en el array.
array
El array findIndex de donde fue llamado.
thisArg
Opcional. Objeto para usar como this cuando se ejecuta el callback.

Valor devuelto

Un índice en el array si un elemento pasa la prueba; en caso contrario, -1.

Descripción

El método findIndex ejecuta la función de callback una vez por cada índice del array 0..length-1 (incluido) hasta que encuentre uno donde callback devuelva un valor verdadero (un valor que fuerce un true). Si dicho elemento es encontrado, findIndex inmediatamente devuelve el índice de esa iteración. Si la función callback nunca devuelve un valor verdadero o el tamaño del array es 0, findIndex devuelve -1. A diferencia de otros métodos de arrays como Array#some, en arrays dispersos la función callback es llamada incluso en índices de entradas que no están presentes en el array.

callback se invoca con tres argumentos: el valor del elemento, el índice del elemento y el Array que será recorrido.

Si el parámetro thisArg es provisto a findIndex, entonces será usado como el this para cada invocación del callback. Si no es provisto, entonces undefined será utilizado. 

findIndex no altera el array desde el que es llamado.

El rango de elementos procesados por findIndex se establece antes de la primera invocación de la función callback. Los elementos añadidos al array después de que la llamada a findIndex comience no serán visitados por el callback. Si un elemento existente que no ha sido visitado en el array es modificado por el callback, el valor pasado al callback que lo visite será el valor en el momento en que findIndex visite el índice del elemento; los elementos que son eliminados no 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;
    }
  }
  return element > 1;
}

console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, no encontrado
console.log([4, 6, 7, 12].findIndex(isPrime)); // 2

Polyfill

Este método ha sido agregado a la especificación de ECMASCRIPT 6 (ES6) y puede que aún no esté disponible en todas las implementaciones de JavaScript. Sin embargo, puedes usar el polyfill de Array.prototype.findIndex que se muestra a continuación:

if (!Array.prototype.findIndex) {
  Array.prototype.findIndex = function(predicate) {
    if (this === null) {
      throw new TypeError('Array.prototype.findIndex called on null or undefined');
    }
    if (typeof predicate !== 'function') {
      throw new TypeError('predicate must be a function');
    }
    var list = Object(this);
    var length = list.length >>> 0;
    var thisArg = arguments[1];
    var value;

    for (var i = 0; i < length; i++) {
      value = list[i];
      if (predicate.call(thisArg, value, i, list)) {
        return i;
      }
    }
    return -1;
  };
}

Especificaciones

Especificación Estado Comentario
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.findIndex' in that specification.
Standard Definición inicial.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Array.prototype.findIndex' in that specification.
Draft  

Compatibilidad en navegadores

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Soporte básico 45.0 25.0 (25.0) No support No support 7.1
Característica Android Chrome para Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Soporte básico No support No support 25.0 (25.0) No support No support 8.0

Ver también

Etiquetas y colaboradores del documento

 Colaboradores en esta página: dannyjhonston, Aldomolina, AlePerez92, luisrodriguezchaves, andrpueb
 Última actualización por: dannyjhonston,