好吧,问题可能很奇怪。 让我解释一下案件。我在一个数组中有5个名字 例如:
var namesArray=['John','Henry','Smith','James','Carl'];
我还有一个来自其他操作的字符串,其中包含其中一个带有称呼的字符串,例如Hello John
或Mr.John
(注意第二个字符串中没有空格)。
var returnedName='Howdy,James!';
我所知道的是,返回的字符串将只包含上述namesArray
中的一个字符串而不再包含,我不知道该字符串在returnedName
中可能包含的周围字符
知道namesArray
中哪些字符串是returnedName
的子字符串的最快方法是什么?我期待一个函数返回namesArray
中字符串的索引,这是returnedName
的子字符串。这样的内置函数是否存在?如果没有,那么最快的是什么(我有一个大约有10万个名字的名字,比方说)呢?
答案 0 :(得分:2)
这似乎更像是一个搜索问题。显然,在搜索时,您需要进行比较以匹配您的搜索字词。对于这个w.r.t.您的问题,在JavaScript中,您可以想到Regex和indexOf。但是为了更快地获得更好的时间复杂度,你必须考虑一些更好的搜索算法(二进制搜索可能),而不是线性迭代数组。
答案 1 :(得分:1)
如果我理解你的问题,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf。
确实有一个for循环......
有关演出问题的更多准确性,请参阅Javascript Performance: How come looping through an array and checking every value is faster than indexOf, search and match?或Fastest way to check a string contain another substring in Javascript?。
答案 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
答案 3 :(得分:0)
你必须迭代数组,检查字符串是否包含数组值,如果是,则打破循环(因为只有一个)并设置变量:
var containsName = '';
for (var i=0; i<namesArray.length; i++) {
if ( returnedName.indexOf( namesArray[i] ) != -1 ) {
containsName = namesArray[i];
break;
}
}
alert( containsName );