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



基本上,我正在开发一个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;
    }
};

现在,一切都非常完美,除了如果$p包含单词Blue Orange,它不识别val1,而是识别val0,因为它在找到第一个Blue后停止比较。

有办法解决这个问题吗?我想一个解决方案是把所有的单个单词元素放到数组的后面,但我更喜欢一种不那么繁琐的修复方法,因为我的数组有超过12000个值。

谢谢。

这应该足够简单了。将数组按长度排序,最长的放在第一位。在这种情况下,您将总是首先找到最长的匹配。

相关内容

最新更新