2017-01-03 19 views
23

Jestem zdezorientowany między różnicą między funkcją indexOf a znalezieniem indeksu w tablicy.Różnica między funkcją indexOf i findIndex macierzy

Dokumentacja mówi

findIndex - Zwraca indeks pierwszego elementu tablicy, gdzie orzeczenie jest prawdziwa, a -1 inaczej.

i

indexOf - Zwraca indeks pierwszego wystąpienia wartości w tablicy.

+0

myślę, że różnica jest, weźmie funkcję jako argument (umożliwiająca bardziej wyszukane znaleziska, jak powiedzieć, że były po prostu szuka pierwszego wystąpienia wartości z określonego fragmentu zamiast Cała wartość), po prostu bierze wartość, której szukasz. To właściwie nie jest złe pytanie. Obniżki bez wyjaśnienia należy poddać głosowaniu w dół. –

+0

Czasami najlepiej zacząć od specyfikacji języka (np. ECMA-262) i wypełnić luki innymi materiałami: [* Array.prototype.indexOf (searchElement \ [, fromIndex \]) *] (http: // ecma- international.org/ecma-262/7.0/index.html#sec-array.prototype.indexof) vs [* Array.prototype.findIndex (predicate \ [, thisArg \]) *] (http: // ecma-international. org/ecma-262/7.0/index.html # sec-array.prototype.findindex). – RobG

+0

Dzięki Tim i RobG –

Odpowiedz

38

Główną różnicą są parametry tych funkcji:

  • Array.prototype.indexOf() oczekuje wartość jako pierwszy parametr. To sprawia, że ​​dobrym wyborem jest znalezienie indeksu w tablicach typów pierwotnych.

  • Array.prototype.findIndex() oczekuje pierwszego oddzwonienia oddzwaniania. Użyj tej opcji, jeśli indeks jest wymagany w tablicach z typami nieprostymi (np. Obiektami) lub warunek wyszukiwania jest bardziej złożony niż tylko wartość.

Zobacz linki na przykłady obu przypadków.

6

FindIndex jest przydatna, jeśli chcesz znaleźć pierwszy element, który pasuje do orzecznika: W przykładzie W3C są numery i pasuje jeśli wiek klienta powyżej lub równy 18.

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

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

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

konsola:

2 

Możesz znaleźć dokładny indeks elementu z funkcją indexOf obiektu Array, ale nie możesz przekazać predykatu. Jest szybszy, jeśli chcesz znaleźć konkretny element:

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

Powroty:

1 

Index liczenie zaczyna się od 0, więc pierwszym elementem jest wskaźnik 0.

0

Plese można użyć obejmuje 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

Główną różnicą są parametry tych funkcje:

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

To nie daje odpowiedzi na pytanie. Gdy masz już wystarczającą [reputację] (https://stackoverflow.com/help/whats-reputation), będziesz mógł [komentować dowolny wpis] (https://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). - [Z recenzji] (/ opinia/niskiej jakości-posts/18242349) – Mamun

Powiązane problemy