私はJavaScriptの学習を始めたばかりで、特定のWebサイトのアイテムリストをチェックして、ユーザーが提供したキーワードを含むアイテムをチェックする小さなクロム拡張に取り組んでいます。文字列を文字列の配列と比較する方法に関するヘルプを探しています。
だから私はこれらの変数を持っています:
var itemDetails = '[alter] saber 1/8 figure unopened';
var trackingList = ['alter figure', 'magic', 'sword art'];
itemDetails に trackingList の文字列が含まれているかどうかを確認する必要があります。私はindexOf()
このように使用できることを知っています:
function checkArray(str, arr){
for(var i=0; i < arr.length; i++){
if(str.indexOf(arr[i]) > -1)
return true;
}
return false;
}
checkArray(itemDetails,trackingList); // returns false
ただし、「alter figure」など、複数の単語が含まれるcheckArray()
文字列の場合、文字列内の両方の単語が のどこかに現れる限り、true を返しますitemDetails
。' alter checkArray()
' と 'figure' の両方が にあるため、上記の例では true を返す必要がありitemDetails
ます。
私が現在使用している方法は、各要素をtrackingList
次のように分割することです。
function splitTrackList(arr){
var newarr = [];
for(var i = 0; i < arr.length; i++){
newarr[i] = arr[i].split(" ");
}
return newarr;
}
trackList = splitTrackList(trackList);
// [['alter', 'figure'], ['magic'], ['sword', 'art']]
そして、次を使用して比較しindexOf()
ます。
function newCheckArray(str, arr){
var passed = true;
for(var i=0; i < arr.length; i++){
for(var j=0; j < arr[i].length; j++){
if(str.indexOf(arr[i][j]) == -1){
passed = false;
break;
}
else passed = true;
}
if(passed) //stop loop if match found
break;
}
return passed;
}
newCheckArray(itemDetails,trackingList); //returns true
私の方法はこれまでのところ機能していますが、これを行うためのはるかに高速で効率的な方法があると思います。ご意見をお聞かせください。前もって感謝します。