仕事では、indexOf() メソッドが今でも頻繁に使用されているので、この知識ポイントについて簡単にまとめてみましょう。
基本定義: IndexOf() メソッドは、指定された文字列値が文字列内で最初に出現する位置を返します。見つからない場合は -1 を返します。
-indexOf() は、指定された検索順序で最初に出現した文字列のみを返します。
- 動作中のアプリケーション => 取得する文字列値が存在しない場合、メソッドは -1 を返します。
- IndexOf() メソッドでは大文字と小文字が区別されます。
1. 文法
stringObject.indexOf(searchvalue,fromindex)
// 该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。
// 开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。
// 如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。
// stringObject 中的字符位置是从 0 开始的
2. 配列および文字列におけるindexOf()メソッドの具体的な適用
このメソッドは、文字列または配列内の要素の位置を返します。
<1> String型オブジェクトでの使用
let str = 'orange';
str.indexOf('o'); //0
str.indexOf('n'); //3
str.indexOf('c'); //-1 未找到返回-1
注: JavaScript String IndexOf() メソッド
<2> Array型オブジェクトでの使用
array.indexOf(item,start) は、
配列内の要素の位置を返します。取得できない場合は、-1 を返します。
パラメータ説明
項目は必須です。開始を検索する要素
はオプションです。取得する場所を指定します。有効な値は 0 ~ stringObject.length - 1 です。
配列内の要素を検索するには、 ES6 で提供されるfind()メソッドを使用することもできます。
let arr = ['orange', '2016', '2016'];
arr.indexOf('orange'); //0
arr.indexOf('o'); //-1
var arr = [1,2,3];
console.log(arr.indexOf('1'));//-1 不包含 从这可以看出数组使用indexOf区分类型(type)
console.log(arr.indexOf(1));//0 包含
console.log(arr.indexOf(2));//1 包含
console.log(arr.indexOf(3));//2 包含
console.log(arr.indexOf(4));//-1 不包含
<3>数値型には使用できません
let num = 2016;
num.indexOf(2); //Uncaught TypeError: num.indexOf is not a function
数値型の場合は、indexOf メソッドを使用する必要がありますか? 次に、それを文字列に変換し、上記の例を記述します
// 二逼青年的写法
num = '2016';
num.indexOf(2); //0
// 普通青年的写法
num.toString().indexOf(2); //0
// 文艺青年的写法
('' + num).indexOf(2); //0
3.indexOf()を使用して配列の重複を排除します。
// 写法一
var newArr = [ ];
arr.forEach(function(v){ // 使用forEach循环遍历,获取原始数组arr中的所有数值
// 在新数组中,查找当前获取的原始数组的数值
// newArr.indexOf(v) 执行结果如果是 -1
// 证明在新数组中,没有这个原始数组的数据
if(newArr.indexOf(v) === -1){
// 将这个数据,写入到新数组中
newArr.push(v)
}
})
console.log( newArr );
// 写法二
var arr = ['C','A','A','G','G','G','D']
var newArr = []
arr = arr.sort().forEach(function(n){
if(newArr.indexOf(n) == -1){
newArr.push(n)
}
})
console.log(newArr);// ["A", "C", "D", "G"]
// 写法三
var arr = ['a','c','b','d','a','b']
var arr2 = [];
for(var i = 0;i<arr.length;i++){
if(arr2.indexOf(arr[i])<0){
arr2.push(arr[i]);
}
}
arr2.sort();
console.log(arr2);//["a", "b", "c", "d"]
おまけ: JS のsort() メソッドsort() メソッド| JavaScript sort() メソッド | 初心者向けチュートリアル| JS に付属する sort() メソッドの包括的な理解 | スクリプト ホーム
sort() メソッドは、配列の要素をソートするために使用されます。並べ替え順序は、アルファベット順または数値順、および昇順または降順にすることができます。デフォルトの並べ替え順序はアルファベット昇順です。
注:このアプローチでは、元の配列が変更されます。
文法:
arrayObject.sort(sortby); パラメータ sortby はオプションです。ソート順を指定します。関数である必要があります。
Array の sort() メソッドは、デフォルトですべての要素を String に変換し、Unicode に従って並べ替えます。
sort() は元の配列を変更し、変更された (ソートされた) 配列を返します。
注:このメソッドがパラメータなしで呼び出された場合、配列内の要素はアルファベット順、より正確には文字エンコード順に並べ替えられます。これを実現するには、まず配列の要素を比較のために (必要に応じて) 文字列に変換する必要があります。
他の基準で並べ替える場合は、2 つの値を比較し、2 つの値の相対的な順序を示す数値を返す比較関数を提供する必要があります。比較関数には 2 つのパラメータ a と b が必要です(a は現在の比較番号の次の比較番号を表し、b は現在の比較番号を表します)。
比較関数には 2 つのパラメータ a と b が必要で、その戻り値は次のとおりです。
a が b より小さい場合、つまり a - b が 0 より小さい場合、ソートされた配列では a が b より前に出現する必要があり、0 より小さい値が返され、配列は昇順にソートされます。
a が b と等しい場合、0 が返されます。
a が b より大きい場合、つまり a - b が 0 より大きい場合、0 より大きい値が返され、配列は降順にソートされます。
上昇
降順で並べ替え
4. JS配列のfindIndexとindexOfの比較
<1> findIndex()
findIndex() メソッドは、条件を満たすテスト条件 (関数) に渡された配列の最初の要素の位置を返します。
findIndex() メソッドは、配列内の要素ごとに関数の実行を 1 回呼び出します。
条件のテスト時に配列内の要素が true を返した場合、findIndex() は条件を満たす要素のインデックス位置を返し、後続の値は実行関数を呼び出しません。
一致する要素がない場合は、-1 を返します。
注: findIndex() 関数は空の配列に対しては実行されません。
注: findIndex() は配列の元の値を変更しません。
参考記事:ES6の配列メソッドfind()、findIndex()、filter()のまとめ - 短冊
<2>indexOf()
IndexOf() メソッドは、配列内の指定された要素の位置を返します。
このメソッドは、配列を最初から最後まで検索して、対応する要素が含まれているかどうかを確認します。検索を開始する位置は、配列の開始位置、または配列の先頭(開始パラメータが指定されていない場合)です。項目が見つかった場合は、その項目が最初に出現した位置が返されます。開始位置のインデックスは 0 です。
指定された要素が配列内に見つからない場合は、-1 を返します。
✔ findIndex() とindexOf() の比較 ✔
1. findIndex() メソッドと IndexOf() メソッドは、ループ トラバーサルを通じて実装されます。
2. findIndex() の適用シナリオは、indexOf() よりも幅広く、大なり等しい、未満の検索が可能です。式はカジュアルに記述できますが、indexOf は最初のレベルで等しい値しか検索できません。
3. findIndex() は、見つかった後に終了する必要がない点を除けば、実際には for ループと同等です。
参考文献
JS の高度な標準関連関数と標準オブジェクト - CSDN ブログ
IndexOfの使い方と注意点、配列へのindexOfの使い方
JavaScript IndexOf の概要 - Zhihu | JavaScript でのindexOf の使用に関するヒント - スクリプト ホーム