【发布时间】:2017-04-07 22:36:02
【问题描述】:
我在 JavaScript 中有一个字符串数组。我正在尝试开发一个功能,
- 将子字符串作为输入。
- 搜索数组。
- 从靠近子字符串的数组中返回字符串。该列表将作为建议提供给来电者。
例如:-
数组包含以下条目。
Hello
What is hello
World
Spacearenotthereinthishello
HELLO
Highway to hell
JavaScript
StackOverflow
我调用如下所示的函数
var 结果[] = searchFunc('hell');
结果数组应该包含
Hello
What is hello
Spacearenotthereinthishello
HELLO
Highway to hell
数组可能包含至少 100 个字符串(或更多)。我正在寻找可扩展的解决方案。
最初,我认为我应该排序,然后进行二进制搜索,但如果您想从主数组中提取特定字符串输入的所有建议,这样做很麻烦。我正在寻找可以帮助我实现更快搜索的算法。我并不担心主阵列中的插入时间复杂性。
我确实查找了多个堆栈溢出帖子。他们确实谈到在一本大书中搜索特定的字符串。他们都没有谈论从数组返回子字符串的建议。
感谢您的帮助。
【问题讨论】:
-
如果您正在查看大约 100 个字符串,并且每个字符串可能有几十个字符长,那么使用 indexOf 的简单过滤器应该可以很好地扩展。如果您最终要获得 100,000 个元素,那么您可能需要开始研究用于 ngram 搜索的高级数据结构和算法。
-
是的。这个问题的目的是看看其他人是否知道我可以实现的算法来创建一个可扩展的解决方案。 (如果它足够好,甚至开源它)。你知道有什么可以帮助我处理巨大的字符串数组吗?
-
您可以使用a tool like this 来获取每个短语中的字符组合,并从每个不同的字符组合到它所在的短语构建一个对象/映射。或者您可以使用something like this这只是让您通常进行全文搜索。
-
@StriplingWarrior 我将检查 Lunr。我欠你一杯啤酒,甚至建议它。谢谢!
标签: javascript arrays string search