Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript indexOf在找到匹配的第一个字符串后停止,但我希望它找到匹配的最佳字符串_Javascript_Jquery - Fatal编程技术网

Javascript indexOf在找到匹配的第一个字符串后停止,但我希望它找到匹配的最佳字符串

Javascript indexOf在找到匹配的第一个字符串后停止,但我希望它找到匹配的最佳字符串,javascript,jquery,Javascript,Jquery,本质上,我正在开发一个chrome扩展,它查看页面上的所有文本,并将其与一个名称数组进行比较,如果任何p标记包含该数组的值,那么我会做一些事情 问题其实很简单。我的数组是一个关联数组,如下所示: "Blue": 'val0', "Blue Orange": 'val1', "Red": 'val2', "Red White": 'val3' 这就是我的代码的样子: for (var i = 0; i < arrayName.length; i++) { if ($p.indexO

本质上,我正在开发一个chrome扩展,它查看页面上的所有文本,并将其与一个名称数组进行比较,如果任何
p
标记包含该数组的值,那么我会做一些事情

问题其实很简单。我的数组是一个关联数组,如下所示:

"Blue": 'val0',
"Blue Orange": 'val1',
"Red": 'val2',
"Red White": 'val3'
这就是我的代码的样子:

for (var i = 0; i < arrayName.length; i++) {
    if ($p.indexOf(arrayName[i].value) > -1) {
        validNames[arrayName[i].value] = arrayName[i].data;
    }
};
for(变量i=0;i-1){
validNames[arrayName[i]。值]=arrayName[i]。数据;
}
};
现在,一切都非常完美,除了这样一个事实:如果
$p
包含
蓝橙色
这个词,它不会识别
val1
,而是识别
val0
,因为它在找到第一个
蓝色
后停止比较

有没有办法解决这个问题?我想一个解决方案是将所有的单字元素放在数组的后面,但我更喜欢一种不那么繁琐的修复方法,因为我的数组有12000多个值


谢谢。

这应该很简单。使用最长优先顺序按长度对数组排序。在这种情况下,你总是会首先找到最长的匹配。

你能定义“最佳”匹配的标准吗?@sunny不知道该怎么说。如果
blue
p
标记中,不要因为找到了有效的比较停止点而停止,因为
蓝橙色
不可用。。如果这有道理的话。。。可能不会。如果
蓝色
之后的单词是
橙色
,则
蓝色橙色
是有效元素,如果
蓝色
之后的单词不在数组中,则只输出
蓝色
。。。希望这是有道理的。这真的不清楚,似乎缺少了什么。从所显示的情况来看,
蓝色
蓝橙色
似乎没有任何理由不被考虑。一个可行的例子会有所帮助。在使用时,使用术语
array
也有点混乱object@charlietfl如果单词在数组中,我将在页面上突出显示该单词。我使用indexOf检查它是否在数组中,因此一旦它找到
蓝色
,for循环就会停止,因此永远不会进入
蓝橙色
,将网站上的文本突出显示为
蓝色
,而实际上文本应该突出显示
蓝橙色