use*_*957 3 search autocomplete filter underscore.js
使用不定核心实现自动完成搜索的正确方法是什么?
我有一个简单的数组(城市)和一个文本输入字段($ .autocomplete).当用户输入自动完成文本字段中的第一个字母时,它应输出一个数组,其中所有城市都以输入的字母(术语)开头.
城市:
["Graz","Hamburg","Innsbruck","Linz","München","Other","Salzburg","Wien"]
Run Code Online (Sandbox Code Playgroud)
事件监听:
$.autocomplete.addEventListener("change", function(e){
var cities = cities_array;
var term = $.autocomplete.value;
var results = _.filter(cities, function (city){
return
});
console.log(results + "this is results");
});
Run Code Online (Sandbox Code Playgroud)
我用_.contains尝试了它,但它只在完全匹配时返回城市(例如Graz只在输入"Graz"时输出,但在输入"Gr"时不输出).
http://underscorejs.org/docs/underscore.html上的_.filter /._选择集合对我来说不是很清楚,我在这里找到的最接近的是使用下划线过滤JSON.
但我不明白indexOf部分.
thx任何建议!
通过使用#filter和#indexOf,您可以非常接近相当不错的自动完成.
是什么#indexOf做的是,它会检查该字符串是否含有inputVal.如果它不包含它,它将返回,-1因此我们的下面的谓词将工作,但不会失败.
这里的另一个小技巧是,你(看我),希望它能够搜索s并得到一击的Innsbruck和Salzburg一致好评,因此我插嘴#toLowerCase,让你始终处于较低的情况下进行搜索.
return _.filter(cities, function(city) {
return city.toLowerCase().indexOf(inputVal.toLowerCase()) >= 0;
});
Run Code Online (Sandbox Code Playgroud)