javascript - Jquery在自动完成中实现这种排序方法

标签 javascript jquery sorting autocomplete

我有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 个名称,那么这种搜索方法是否高效?以及二分搜索在哪里以及如何填充。

最佳答案

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

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

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

关于javascript - Jquery在自动完成中实现这种排序方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24001733/

相关文章:

javascript - 如果用户名正确,如何制作一个遍历数组并输出一次的for循环

javascript - Uncaught Error : Configuration must contain `projectId` ( when using environment variable )

javascript - 映射对象然后在页面上设置innerHTML会导致项目之间出现逗号

java - 使用快速排序按列对二维数组进行排序

Java - 如何对二维数组进行排序?

javascript - 从复选框中选择选中的值

ajax - 通过JQuery调用远程asmx服务总是失败

javascript - 在对象中查找下一个键 id

c# - $push 操作期间非文档嵌套数组的排序规范

jquery - 复选框的 CSS 边框