带下划线/ JS的自动完成功能

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任何建议!

Hen*_*son 8

通过使用#filter#indexOf,您可以非常接近相当不错的自动完成.

是什么#indexOf做的是,它会检查该字符串是否含有inputVal.如果它不包含它,它将返回,-1因此我们的下面的谓词将工作,但不会失败.

这里的另一个小技巧是,你(看我),希望它能够搜索s并得到一击的InnsbruckSalzburg一致好评,因此我插嘴#toLowerCase,让你始终处于较低的情况下进行搜索.

return _.filter(cities, function(city) {
    return city.toLowerCase().indexOf(inputVal.toLowerCase()) >= 0;
});
Run Code Online (Sandbox Code Playgroud)