Jquery在自动完成中实现了这个排序方法

Jquery implement this sort method in autocomplete

本文关键字:排序 方法 实现 Jquery      更新时间:2023-09-26

我有这个自动完成机场名称的小提琴。

问题-排序

我发现这个问题解决了这个问题,但我不能在我的场景中实现。不是专业的!
快速预览问题-

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个名字,所以这种搜索方法有效吗?以及二进制搜索在哪里以及如何填充。

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

$.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/