[英]Using JS/jQuery to do string search/fuzzy matching?
entirely in JS, no server backend. 完全在JS中,没有服务器后端。 I need to allow the user to search and then show a list of matched names.
我需要允许用户搜索,然后显示匹配名称列表。 I'm using jQuery UI AutoComplete but need some JS to filter the results.
我正在使用jQuery UI AutoComplete,但需要一些JS来过滤结果。
Given an Array of names: 给定一个名称数组:
Bob Hope
James Jones
Steve Jobs
Larry McBridge
Given a search term like Bo 鉴于像Bo这样的搜索词
How can I get just Bob Hope to return 我怎么才能让Bob Hope回归
Given a Search term like b: 给出像b这样的搜索词:
How can I get all but James Jones? 除了詹姆斯·琼斯,我怎能得到所有人?
Any simple JS for comparing two strings? 用于比较两个字符串的简单JS? Thanks
谢谢
var names = ["Bob Hope","James Jones","Steve Jobs","Larry McBridge"]
var query = "bo"
var results = $(names)
.map(function(i,v){
if(v.toLowerCase().indexOf(query.toLowerCase())!=-1){return v}
}).get()
// results is ["Bob Hope"]
Maybe I misunderstood you (given the complexity of the above answer), but I came up with this which uses jQuery. 也许我误解了你(考虑到上面答案的复杂性),但我想出了使用jQuery的这个 。 Every time a key is pressed (when the input has focus), it searches all
li
elements on the page and finds whether they contain the search term. 每次按下某个键(当输入具有焦点时),它将搜索页面上的所有
li
元素并查找它们是否包含搜索词。
Here is the HTML: 这是HTML:
<ul><li>Bob Hope</li>
<li>James Jones</li>
<li>Steve Jobs</li>
<li>Larry McBridge</li></ul><br>
Search: <input id="search" length="24" />
And here is your jQuery: 这是你的jQuery:
$("#search").keyup(function(){
$("li").hide();
var term = $(this).val();
$("li:contains('" + term + "')").show();
});
Using Ivan's answer, but with ES6 changes: 使用Ivan的答案,但ES6更改:
var names = ["Bob Hope","James Jones","Steve Jobs","Larry McBridge"];
function findIn(s, list){
return list.filter((v) => v.toLowerCase().indexOf(s.toLowerCase()) != -1 );
}
findIn('bo', names);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.