【问题标题】:Autocomplete function with underscore/JS带下划线/JS的自动完成功能
【发布时间】:2015-02-23 18:01:21
【问题描述】:

使用 undescore 实现自动完成搜索的正确方法是什么?

我有一个简单的数组(城市)和一个文本输入字段($.autocomplete)。当用户在自动完成文本字段中输入第一个字母时,它应该输出一个数组,其中所有城市都以输入的字母(术语)开头。

城市:

["Graz","Hamburg","Innsbruck","Linz","München","Other","Salzburg","Wien"]

事件监听器:

$.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");
});

我已经用 _.contains 尝试过,但它只在完全匹配时返回城市(例如 Graz 仅在输入“Graz”时输出,但在输入“Gr”时不输出)。

http://underscorejs.org/docs/underscore.html 的 _.filter/._select 集合对我来说不是很清楚,我在这里找到的最接近的是 filtering JSON using underscore

但我不明白 indexOf 部分。

感谢任何建议!

【问题讨论】:

    标签: search filter autocomplete underscore.js


    【解决方案1】:

    通过使用#filter#indexOf,您可以获得相当不错的自动完成功能。

    #indexOf 所做的是检查字符串是否包含inputVal。 如果它不包含它,它将返回-1,因此我们下面的谓词将不会失败。

    这里的另一个小技巧是,您(请阅读我)希望可以搜索 s 并获得 InnsbruckSalzburg 的匹配结果,因此我加入了 #toLowerCase,以便您始终搜索小写。

    return _.filter(cities, function(city) {
        return city.toLowerCase().indexOf(inputVal.toLowerCase()) >= 0;
    });
    

    【讨论】:

    • 为了获得更好的性能:在过滤器之外将 inputVal 转换为小写(它是相同的 inputVal,不应该一遍又一遍地这样做)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多