在javascript中查找字符串中哪些子字符串的最快方法是什么?

时间:2014-01-08 10:13:47

标签: javascript arrays string substring

好吧,问题可能很奇怪。 让我解释一下案件。我在一个数组中有5个名字 例如:

var namesArray=['John','Henry','Smith','James','Carl'];

我还有一个来自其他操作的字符串,其中包含其中一个带有称呼的字符串,例如Hello JohnMr.John(注意第二个字符串中没有空格)。

var returnedName='Howdy,James!';

我所知道的是,返回的字符串将只包含上述namesArray中的一个字符串而不再包含,我不知道该字符串在returnedName中可能包含的周围字符

知道namesArray中哪些字符串是returnedName的子字符串的最快方法是什么?我期待一个函数返回namesArray中字符串的索引,这是returnedName的子字符串。这样的内置函数是否存在?如果没有,那么最快的是什么(我有一个大约有10万个名字的名字,比方说)呢?

4 个答案:

答案 0 :(得分:2)

这似乎更像是一个搜索问题。显然,在搜索时,您需要进行比较以匹配您的搜索字词。对于这个w.r.t.您的问题,在JavaScript中,您可以想到RegexindexOf。但是为了更快地获得更好的时间复杂度,你必须考虑一些更好的搜索算法(二进制搜索可能),而不是线性迭代数组。

答案 1 :(得分:1)

答案 2 :(得分:1)

有多种方法可以检查字符串是否包含另一个子字符串。

var str = "Hello world, welcome to Javascript Coding.";
var n = str.indexOf("welcome");

//Returns Index no 13

var s = "foo";
console.log(s.indexOf("oo") > -1)

//returns true

您也可以使用string.includes方法来实现相同的结果

var str = "Hello World, Welcome to Javascript Coding";

console.log(str.includes("Welcome to"));    // true
console.log(str.includes("Javascript")); // true
console.log(str.includes("To be", 1)); // false  

参考文章How to check if string contains another substring

答案 3 :(得分:0)

你必须迭代数组,检查字符串是否包含数组值,如果是,则打破循环(因为只有一个)并设置变量:

var containsName = '';

for (var i=0; i<namesArray.length; i++) {
    if ( returnedName.indexOf( namesArray[i] ) != -1 ) {
        containsName = namesArray[i];
        break;
    }
}

alert( containsName );

FIDDLE