我刚开始学习 javascript,并且正在开发小型 chrome 扩展程序,该扩展程序检查某个网站的项目列表中是否包含用户提供的关键字的任何项目。我正在寻找有关将字符串与字符串数组进行比较的方法的帮助。
所以我有这些变量:
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()
只要字符串中的两个单词都出现在itemDetails
. 所以checkArray()
应该在上面的例子中返回 true,因为 'alter' 和 'figure' 都在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
我的方法到目前为止有效,但我猜有一种更快/更有效的方法来做到这一点。请让我知道你的想法。先感谢您。