Différence entre indexOf et la fonction findIndex du tableau


23

Je suis confus entre la différence entre les deux indexOf de fonction et trouver l'index dans un tableau.

La documentation dit

FindIndex - Retourne l'index du premier élément du tableau où prédicat est vrai, et -1 sinon.

et

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

  0

Je pense que la différence est, on prend une fonction comme argument (ce qui permet des découvertes plus sophistiquées, comme dites que vous recherchez la première occurrence d'une valeur avec une sous-chaîne spécifique au lieu de simplement la valeur entière), on prend juste la valeur que vous recherchez. Ce n'est en fait pas une mauvaise question. Downvotes sans explication devrait être votable. 03 janv.. 172017-01-03 12:04:48

  0

Parfois, il est préférable de commencer par la spécification de langage (par exemple, ECMA-262) et de combler les lacunes avec un autre matériau: [* Array.prototype.indexOf (searchElement \ [, fromIndex \]) *] (http: // ecma- international.org/ecma-262/7.0/index.html#sec-array.prototype.indexof) vs [* Array.prototype.findIndex (prédicat \ [, thisArg \]) *] (http: // ecma-international. org/ecma-262/7.0/index.html # sec-array.prototype.findindex). 03 janv.. 172017-01-03 12:22:25

  0

Merci Tim et RobG 03 janv.. 172017-01-03 12:26:12

38

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

  • Array.prototype.indexOf() attend une valeur en tant que premier paramètre. Cela en fait un bon choix pour trouver l'index dans les tableaux de types primitifs.

  • Array.prototype.findIndex() attend un rappel en tant que premier paramètre. Utilisez-le si vous avez besoin de l'index dans des tableaux avec des types non-primitifs (par exemple, des objets) ou si votre condition de recherche est plus complexe qu'une simple valeur.

Voir les liens pour des exemples des deux cas.


6

FindIndex est utile, si vous voulez trouver le premier élément qui correspond à votre prédicat: Dans l'exemple du W3C il y a des chiffres et correspond si au-dessus ou égale à l'âge du client à 18.

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

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

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

console:

2 

Vous pouvez trouver un index d'élément exact avec la fonction indexOf de Array, mais vous ne pouvez pas transmettre 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)); 

retours:

1 

comptage d'index commence à 0, de sorte que le premier indice de l'élément est 0.


0

Plese vous pouvez utiliser comprend preffer indexOf

[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 principale différence sont les paramètres de ceux-ci 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 
  0

Cela ne fournit pas de réponse à la question. Une fois que vous avez suffisamment [réputation] (https://stackoverflow.com/help/whats-reputation) vous pourrez [commenter n'importe quel article] (https://stackoverflow.com/help/privileges/comment); Au lieu de cela, [fournissez des réponses qui ne nécessitent pas de précisions de la part du demandeur] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- je-fais-à la place). - [De l'examen] (/ review/low-quality-posts/18242349) 13 déc.. 172017-12-13 14:59:50