web-dev-qa-db-ja.com

indexOfと配列のfindIndex関数の違い

私は2つの関数indexOfの違いと配列の中のIndexを見つけることの間で混乱しています。

ドキュメントは言う

findIndex - 述語が真である配列の最初の要素のインデックスを返し、そうでなければ-1を返します。

そして

indexOf - 配列内で値が最初に出現した位置のインデックスを返します。

88
Rahul Singh

主な違いはこれらの関数のパラメータです。

  • Array.prototype.indexOf() は最初のパラメータとしてを期待します。これは、 プリミティブ型 (string、number、またはbooleanなど)の配列でインデックスを見つけるのに適しています。

  • Array.prototype.findIndex() は最初のパラメータとしてコールバックを期待します。非プリミティブ型(オブジェクトなど)の配列のインデックスが必要な場合、または検索条件が単なる値よりも複雑な場合は、これを使用してください。

両方の場合の例についてはリンクを参照してください。

135
str

あなたの述語にマッチする最初の要素を見つけたいならば、FindIndexは役に立ちます:W3Cの例では、顧客の年齢が18歳以上ならば数とマッチがあります。

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

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

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

コンソール:

2

ArrayのindexOf関数を使って正確な要素インデックスを見つけることができますが、述語を渡すことはできません。特定の要素を見つけたい場合はより速いです。

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

以下を返します。

1

インデックスカウントは0から始まるので、最初の要素インデックスは0です。

9
Dániel Kis

主な違いはこれらの関数のパラメータです:

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

includesを使用することもできます。

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

しかし私はindexOfメソッドを好みます:

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

もう1つの違いは、findIndex()ユーザーを適用できることです。いくつかの関数そしてテストにパスした配列内の要素を見つけます。

しかし、indexOf()演算子でも同じことは当てはまりません。ユーザーは、特定の要素が配列に存在するかどうかを確認するだけです。

2
Alok Ranjan