我刚开始学习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
返回true。因此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
我的方法到目前为止有效,但我猜测有一种更快/更有效的方法。请让我知道你在想什么。先感谢您。
答案 0 :(得分:2)
我会做像
这样的事情https://jsfiddle.net/denov/FXjXq/3/
var arr = [
"cat dog mouse",
"blue yellow green",
"pizza burrito hamburger"
];
function isInString(needle, haystack) {
return new RegExp('\\b' + needle + '\\b').test(haystack);
}
function checkForStringInArray(stringToFind, arr) {
var inString = false;
for(var i=0; i < arr.length; i++){
inString = isInString(stringToFind, arr[i]);
if(inString) break;
}
return inString;
}
var inString = checkForStringInArray('yellow', arr);
答案 1 :(得分:1)
您可以使用正则表达式。我给你举个例子,虽然它不是最有效的
function checkArray(str, arr){
for(var i=0; i < arr.length; i++){
if(str.match((".*" + arr[i].trim() + ".*").replace(" ", ".*")))
return true;
}
return false;
}
这里我将字符串“key1 keyn”更改为“。* key1。 keyn。”,以便它可以匹配字符串中的所有键。请记住,如果它们是另一个词的一部分,这将匹配它们。祝你好运。
P.S。学习正则表达式。它们在几乎所有语言中都非常重要。
答案 2 :(得分:1)
这应该有效:
function checkArray(str, arr){
for (var j = 0; j < arr.length;j++) {
wordtab = splitTrackList(arr[j]);
for(var i=0; i < tab.length; i++){
if(str.indexOf(wordtab[i]) > -1)
return true;
}
}
return false;
}
答案 3 :(得分:0)
这是一个使用lambda表达式的解决方案:
config : Object
L-> headers: Object
L-> Accept : "application/json, text/plain, */*"
Auth-Token : "1234"
https://jsfiddle.net/wrz1m0b5/
正则表达式解决方案仅在单词顺序正确时才有效。