【问题标题】:Jquery implement this sort method in autocompleteJquery在自动完成中实现这种排序方法
【发布时间】:2014-06-03 12:39:23
【问题描述】:

我有this fiddle,它会自动完成机场名称。

问题 - 排序

我找到了解决问题的this question,但我无法在我的场景中实施。不是专业人士!
从问题中快速预览 -

var source = ['Adam', 'Benjamin', 'Matt', 'Michael', 'Sam', 'Tim'];
$("input").autocomplete({
    source: function (request, response) {
        var term = $.ui.autocomplete.escapeRegex(request.term)
            , startsWithMatcher = new RegExp("^" + term, "i")
            , startsWith = $.grep(source, function(value) {
                return startsWithMatcher.test(value.label || value.value || value);
            })
            , containsMatcher = new RegExp(term, "i")
            , contains = $.grep(source, function (value) {
                return $.inArray(value, startsWith) < 0 &&
                    containsMatcher.test(value.label || value.value || value);
            });

        response(startsWith.concat(contains));
    }
});

我只是尝试调整源,但这不起作用。

另外,实际机场列表包含超过 35000 个名称,那么这种搜索方法是否有效?以及二分查找在哪里以及如何填写。

【问题讨论】:

  • 只要有 35k 条记录,您可能希望改用 MySQL 查询
  • 您从哪里获得机场名称(您的真实来源是什么)?通常像这样的开放数据集合会提供可选的 GET 参数,您可以使用这些参数来设置搜索词和排序。所以所有的逻辑通常发生在源的服务器端。
  • 你应该把这个东西放到数据库里。
  • 什么是“二进制排序”???不,过滤很长的列表两次不如只过滤一次有效。
  • @Bergi,我认为他指的是二进制搜索。但是,我不知道他为什么需要那个。

标签: javascript jquery sorting autocomplete


【解决方案1】:

如果您只需要按字母顺序对结果进行排序,请使用响应函数参数中的排序方法,如下所示:

$.each(source, function(i, airportItem){
  if (airportItem.iata.toLowerCase().indexOf(searchTerm) !== -1 || airportItem.name.toLowerCase().indexOf(searchTerm) === 0)
    ret.push(airportItem.name + ' - ' + airportItem.iata);
});
response(ret.sort());

这是一个修改过的小提琴来说明:http://jsfiddle.net/xxww6/

【讨论】:

  • 某些以字符开头的术语应首先显示。在少数情况下,您的方法令人兴奋且简单。但我想正则表达式方法涵盖了所有范围。
  • 但我相信问题更复杂。由于存在多个键值对,因此结果应该是这样的,最初它显示完全匹配,然后显示相似的值。你怎么看?例如,谷歌航班是如何做到的。
  • 更优选地,最终列表可以基于位置。无论匹配什么,根据用户所在的国家/地区显示前几项,然后像往常一样显示其余的。
  • 此时您正在谈论一个抽象的可用性问题,这实际上只是您的偏好问题。
  • 一种粗鲁的方法不会把它带到任何需要改进方法的可用性。
猜你喜欢
  • 1970-01-01
  • 2020-02-22
  • 2015-10-27
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
相关资源
最近更新 更多