我在JavaScript中有一个字符串数组。我正在尝试开发一个
的功能例如: -
Array包含以下条目。
Hello
What is hello
World
Spacearenotthereinthishello
HELLO
Highway to hell
JavaScript
StackOverflow
我调用如下所示的函数
var result [] = searchFunc(' hell');
结果数组应包含
Hello
What is hello
Spacearenotthereinthishello
HELLO
Highway to hell
阵列可能包含至少100个字符串(或更多)。我正在寻找可扩展的解决方案。
最初,我认为我应该排序然后进行二分搜索,但如果您想从主数组中获取特定字符串输入的所有建议,那么这很麻烦。我正在寻找可以帮助我实现更快搜索的算法。我并不担心主数组中的插入时间复杂性。
我确实查找了多个堆栈溢出帖子。他们确实谈到了搜索特定字符串的大书。他们都没有谈论从数组中为子字符串返回建议。
感谢您的帮助。
答案 0 :(得分:3)
YourArray.filter()将完成这项工作。快速原型:
var results = arrayName.filter(function(value) {
return value.toLowerCase().indexOf(searchStr.toLowerCase()) >= 0;
});
答案 1 :(得分:0)
// declare array of string fragments myArrayOfStringFragments = /* TODO: get the content [ ... ] */ // optional step, normalize all strings to lower-case /* TODO: input normalization with Array.prototype.map() or something similar */ // declare comparison function function strContainsMatch(slookfor) { return slookfor.includes("ello"); } // iterate using Array.prototype.filter() var filtered = myArrayOfStringFragments.filter(strContainsMatch);
hello
,则hell
将匹配超出您想要的内容,如果您的输入未标准化为小写,则会错过Hello
答案 2 :(得分:0)
另一种解决方案是创建一个正则表达式来做同样的事情。
var condition = new RegExp("hell", 'g');
var results = arrayName.filter(function(value) {
return condition.test(value.toLowerCase())
});