Diferencia entre la función indexOf y findIndex de la matriz


23

Estoy confundido entre la función de dos índices y encuentro el índice en una matriz.

La documentación dice

FindIndex - Devuelve el índice del primer elemento de la matriz donde predicado es verdadero, y -1 en caso contrario.

y

indexOf - Devuelve el índice de la primera aparición de un valor en una matriz .

  0

Creo que la diferencia es, se tiene una función como argumento (que permite hallazgos más sofisticados, como decir que estabas buscando la primera aparición de un valor con una subcadena específica en lugar de sólo la valor total), uno solo toma el valor que está buscando. En realidad no es una mala pregunta. Los votos atrasados ​​sin explicación deben ser de baja votación. 03 ene. 172017-01-03 12:04:48

  0

A veces es mejor comenzar con la especificación del lenguaje (es decir, ECMA-262) y completar las lagunas con otro material: [* Array.prototype.indexOf (searchElement \ [, fromIndex \]) *] (http: // ecma- international.org/ecma-262/7.0/index.html#sec-array.prototype.indexof) versus [* Array.prototype.findIndex (predicate \ [, thisArg \]) *] (http: // ecma-international. org/ecma-262/7.0/index.html # sec-array.prototype.findindex). 03 ene. 172017-01-03 12:22:25

  0

Gracias Tim y RobG 03 ene. 172017-01-03 12:26:12

38

La principal diferencia son los parámetros de estas funciones:

  • Array.prototype.indexOf() espera un valor como primer parámetro. Esto hace que sea una buena opción encontrar el índice en matrices de tipos primitivos.

  • Array.prototype.findIndex() espera una devolución de llamada como primer parámetro. Úselo si necesita el índice en matrices con tipos no primitivos (por ejemplo, objetos) o su condición de búsqueda es más compleja que solo un valor.

Consulte los enlaces para ver ejemplos de ambos casos.


6

FindIndex es útil, si usted quiere encontrar el primer elemento que coincide con su predicado: En el ejemplo de W3C hay números y coincide si la edad del cliente por encima o igual a 18.

var ages = [3, 10, 18, 20]; 

function checkAdult(age) { 
    return age >= 18; 
} 

console.log(ages.findIndex(checkAdult)); 

consola:

2 

Puede encontrar un índice de elemento exacto con la función indexOf de Array, pero no puede pasar un predicado. Es más rápido si se quiere encontrar un elemento específico:

var ages = [3, 10, 18, 20]; 
console.log(ages.indexOf(10)); 

devuelve:

1 

conteo Índice comienza en 0, por lo que el primer índice elemento es 0.


0

Plese puede utilizar incluye indexOf preffer

[1, 2, 3].includes(2);  // true 
[1, 2, 3].includes(4);  // false 
[1, 2, 3].includes(3, 3); // false 


var vals = [ "foo", "bar", 42, "baz" ]; 
if (~vals.indexOf(42)) { 
// found it! 
} 

4

La principal diferencia son los parámetros de estos funciones:

-> Array.prototype.indexOf ():

var fruits = ["Banana", "Orange", "Apple", "Mango"]; 
    var a = fruits.indexOf("Apple"); 
    The result of a will be: 2 

->Array.prototype.FindIndex():

 var ages = [3, 10, 18, 20]; 

     function checkAdult(age) { 
     return age >= 18; 
     } 

     function myFunction() { 
     document.getElementById("demo").innerHTML = 
     ages.findIndex(checkAdult); 
     } 

     The result will be: 2 
  0

Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente [reputación] (https://stackoverflow.com/help/whats-reputation) podrá [comentar cualquier publicación] (https://stackoverflow.com/help/privileges/comment); en su lugar, [brinde respuestas que no requieran aclaración del autor de la pregunta] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-instead). - [De la opinión] (/ reseña/mensajes de baja calidad/18242349) 13 dic. 172017-12-13 14:59:50