Array.prototype.findIndex()

Este articulo necesita una revisión editorial. Cómo puedes ayudar.

Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

El método findIndex( ) devuelve un índice en el arreglo, si el elemento en el arreglo satisface la función provista. De lo contrario devuelve -1.
 

Revisar también el método find(), que devuelve el valor  de un elemento encontrado en el arreglo en vez de su indice.

Sintaxis

arr.findIndex(callback[, thisArg])

Parametros

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

Descripción

El método findIndex ejecuta la función de callback una vez por cada elemento existente en el arreglo hasta que encuentre uno adonde callback retorna un valor true. Si tal elemento es encontrado, findIndex inmediatamente retorna el índice de tal elemento. De otra forma, findIndex retorna -1. callback es invocado solomente por los índices del arreglo que tengan asignador valor determinado; No es invocadado por índices que hayan sido eliminados o que nunca se les haya asignado valor alguno.

callback es invocado 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 arreglo en el cual es llamado.

El alcance de los elementos procesados por findIndex es establecido antes, por la primera invocación al callback. Elementos que son agregados al arreglo despúes de que la llamada a findIndex comienza no serán visitados después por el callback. Si un existente elemento que no ha sido visitado cambia por el callback, su valor pasado al callback será el valor en el momento en el que findIndex visite el índice del elemento. En caso de ser eliminados no serán visitados.

Ejemplos

Encontrar el índice de un número primo en un arreglo

El siguiente ejemplo encuentra el índice de un elemento en el arreglo que sea número primo (o retorna -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 no esté disponible en todas las implementacion de JavaScript aún. Sin embargo, usted puede usar polyfill Array.prototype.findIndex segmento:

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 2017 Draft (ECMA-262)
The definition of 'Array.prototype.findIndex' in that specification.
Draft  

Compatibilidad con los 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 for 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, luisrodriguezchaves, andrpueb
 Última actualización por: dannyjhonston,