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 encontrado :D

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;
  };
}

Specifications

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.findIndex' in that specification.
Standard Initial definition.
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Array.prototype.findIndex' in that specification.
Draft  

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 45.0 25.0 (25.0) No support No support 7.1
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support No support No support 25.0 (25.0) No support No support 8.0

See also

Etiquetas y colaboradores del documento

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