私は2つの関数indexOfの違いと配列の中のIndexを見つけることの間で混乱しています。
ドキュメントは言う
findIndex - 述語が真である配列の最初の要素のインデックスを返し、そうでなければ-1を返します。
そして
indexOf - 配列内で値が最初に出現した位置のインデックスを返します。
主な違いはこれらの関数のパラメータです。
Array.prototype.indexOf()
は最初のパラメータとして値を期待します。これは、 プリミティブ型 (string、number、またはbooleanなど)の配列でインデックスを見つけるのに適しています。
Array.prototype.findIndex()
は最初のパラメータとしてコールバックを期待します。非プリミティブ型(オブジェクトなど)の配列のインデックスが必要な場合、または検索条件が単なる値よりも複雑な場合は、これを使用してください。
両方の場合の例についてはリンクを参照してください。
あなたの述語にマッチする最初の要素を見つけたいならば、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です。
主な違いはこれらの関数のパラメータです:
- > 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
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!
}
もう1つの違いは、findIndex()ユーザーを適用できることです。いくつかの関数そしてテストにパスした配列内の要素を見つけます。
しかし、indexOf()演算子でも同じことは当てはまりません。ユーザーは、特定の要素が配列に存在するかどうかを確認するだけです。