Unterschied zwischen indexOf und findIndex Funktion des Arrays


23

Ich bin verwirrt zwischen dem Unterschied zwischen den beiden Funktionen indexOf und finde Index in einem Array.

Die Dokumentation sagt

Find - Gibt den Index des ersten Elements in dem Array, in dem Prädikat wahr ist, und -1 sonst.

und

indexOf - Gibt den Index des ersten Auftretens eines Wertes in einem Array.

  0

Ich denke, der Unterschied ist, eine Funktion als Argument (ermöglicht anspruchsvollere Funde, wie sagen Sie wurden zum ersten Auftreten eines Wertes mit einem bestimmten Teilkette statt einfach nur zuschaust, Gesamtwert), nimmt man einfach den Wert, nach dem man sucht. Es ist eigentlich keine schlechte Frage. Downvotes ohne Erklärung sollten down-votable sein. 03 jan. 172017-01-03 12:04:48

  0

Manchmal ist es am besten, mit der Sprachspezifikation zu beginnen (zB ECMA-262) und die Lücken mit anderem Material zu füllen: [* Array.prototype.indexOf (searchElement \ [, fromIndex \]) *] (http: // ecma- international.org/ecma-262/7.0/index.html#sec-array.prototype.indexof) vs [* Array.prototype.findIndex (Prädikat \ [, thisArg \]) *] (http: // ecma-international. org/ecma-262/7.0/index.html # sec-array.prototype.findindex). 03 jan. 172017-01-03 12:22:25

  0

Danke Tim und RobG 03 jan. 172017-01-03 12:26:12

38

Der Hauptunterschied sind die Parameter dieser Funktionen:

  • Array.prototype.indexOf() erwartet einen Wert als ersten Parameter. Dies macht es eine gute Wahl, den Index in Arrays von primitiven Typen zu finden.

  • erwartet einen Rückruf als ersten Parameter. Verwenden Sie dies, wenn Sie den Index in Arrays mit nicht-primitiven Typen (z. B. Objekten) benötigen oder Ihre Suchbedingung komplexer als nur ein Wert ist.

Siehe die Links für Beispiele für beide Fälle.


6

Find ist sehr nützlich, wenn Sie das erste Element finden wollen, das Ihr Prädikat übereinstimmt: In W3C Beispiel gibt Zahlen sind und stimmt überein, wenn das Alter des Kunden über oder auf 18 gleich

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

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

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

Konsole:

2 

Sie können einen genauen Elementindex mit der indexOf-Funktion von Array finden, aber Sie können kein Prädikat übergeben. Es ist schneller, wenn Sie ein bestimmtes Element finden wollen:

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

kehrt:

1 

Index Zählung beginnt bei 0, so dass das erste Element Index ist 0.


0

Plese Sie verwenden können, 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

der Hauptunterschied umfasst sind die Parameter dieser Funktionen:

-> Array.prototype.indexOf():

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

->Array.prototype.Find():

 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

Dies liefert keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/18242349) 13 dez. 172017-12-13 14:59:50