101 votes

Différence entre indexOf et la fonction findIndex du tableau

Je suis confus entre la différence entre les deux fonctions indexOf et index dans un tableau.

La documentation dit

findIndex - Retourne l'index du premier élément du tableau où prédicat est true et -1 sinon.

et

indexOf - Retourne l'index de la première occurrence d'une valeur dans un tableau.

161voto

str Points 2352

La principale différence, ce sont les paramètres de ces fonctions:

  • Array.prototype.indexOf() s'attend à une valeur en tant que premier paramètre. Cela en fait un bon choix pour trouver l'index dans des tableaux de types primitifs (comme chaîne de caractères, nombre, booléen ou).

  • Array.prototype.findIndex() s'attend à un rappel comme premier paramètre. Utilisez cette option si vous avez besoin de l'index dans les tableaux avec les types primitifs (les objets, par exemple) ou de votre état à trouver est plus complexe que la simple valeur.

Voir les liens pour les exemples des deux cas.

11voto

Dániel Kis Points 783

FindIndex est utile si vous souhaitez trouver le premier élément qui correspond à votre prédicat: Dans les normes du W3C exemple, il y a des nombres et des allumettes si le client de l'âge au-dessus ou égal à 18.

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

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

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

console:

2

Vous pouvez trouver un élément spécifique à l'index avec la fonction indexOf de la Matrice, mais vous ne pouvez pas passer d'un prédicat. Il est plus rapide si vous voulez trouver un élément spécifique:

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

retourne:

1

Index de comptage commence à 0, donc le premier élément de l'indice est de 0.

4voto

ashishdudhat Points 90

La principale différence réside dans les paramètres de ces fonctions:

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

3voto

zloctb Points 531

Vous pouvez également utiliser includes :

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

mais je préfère la méthode indexOf :

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

2voto

Alok Ranjan Points 21

Une autre différence est qu’avec findIndex (), l’utilisateur peut appliquer une fonction et trouver l’élément du tableau qui passe le test.

Mais la même chose n'est pas vraie avec l'opérateur indexOf () . Un utilisateur peut simplement vérifier si l'élément en question existe ou non dans le tableau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X