基本上我有一个数组,我需要执行部分文本搜索(所有元素都是英文字符串)。该数组可以有大约1000个元素,我需要能够(有效地)搜索每个元素中的字符串。
我唯一的选择是通过运行每个字符串对抗.match()的数组的完整循环吗?或者会有更好的选择吗?
我的一个想法是将1000个元素数组拆分成大约100个块,然后是.join.match()那个部分。这样,如果找到一个元素,我们可以查看它,如果不是,我们可以移动到下一个块。显然,块大小需要稍微调整一下,但这会提供一个可行的解决方案吗?
答案 0 :(得分:3)
您可以尝试使用inverted index。 Here's a nice implementation in Javascript,非常采用Lucene风格。虽然我想知道它是否仅适用于1000个元素,但我想这也取决于每个元素的持续时间。
答案 1 :(得分:0)
这个人会为你做这件事吗?
<script>
var str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut erat vitae nulla dignissim sodales. Duis mattis, massa ac adipiscing lacinia, massa velit suscipit turpis, ut eleifend risus nisl sed dui. Suspendisse vitae malesuada purus. Vestibulum at pharetra justo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi sit amet risus augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed luctus, tellus vehicula sollicitudin tempus, quam dolor scelerisque dolor, ac blandit libero nisi quis metus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer id elit nunc. Quisque tincidunt tempor ipsum, quis porta metus mollis at. Aenean id sem sit amet est vestibulum feugiat. \
Duis rutrum, ligula id dapibus molestie, velit tellus interdum erat, id fringilla mi metus vel neque. Pellentesque dolor arcu, imperdiet vel sodales vitae, egestas ut ligula. Curabitur sapien erat, congue a lacinia sed, accumsan id ipsum. Praesent sit amet tellus neque, id placerat lacus. Etiam nec tortor tortor, nec facilisis nulla. Aenean dui metus, rutrum a fringilla eget, porta ut nisi. Vestibulum volutpat tempor nibh, nec porta risus molestie eu. In metus ipsum, ultricies at posuere ac, tristique sit amet lorem. Sed et quam augue. Aenean eget vestibulum erat. Sed neque orci, luctus a sollicitudin at, rhoncus nec neque. Sed blandit, metus non pharetra semper, nulla ante suscipit orci, nec ultricies erat ipsum vel risus. Pellentesque a neque est.";
var partial = "sed"
var regExp = new RegExp("("+partial+")","gi");
document.write(str.replace(regExp,'<span style="color:red">$1</span>'));
</script>