Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery在autocomplete中实现这种排序方法_Javascript_Jquery_Sorting_Autocomplete - Fatal编程技术网

Javascript Jquery在autocomplete中实现这种排序方法

Javascript Jquery在autocomplete中实现这种排序方法,javascript,jquery,sorting,autocomplete,Javascript,Jquery,Sorting,Autocomplete,我有哪些自动完成机场名称 问题-排序 我找到了解决问题的方法,但我无法在我的场景中实现。不是职业选手 快速预览问题- var source = ['Adam', 'Benjamin', 'Matt', 'Michael', 'Sam', 'Tim']; $("input").autocomplete({ source: function (request, response) { var term = $.ui.autocomplete.escapeRegex(reque

我有哪些自动完成机场名称

问题-排序

我找到了解决问题的方法,但我无法在我的场景中实现。不是职业选手
快速预览问题-

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));
    }
});
var source=['Adam','Benjamin','Matt','Michael','Sam','Tim'];
$(“输入”)。自动完成({
来源:功能(请求、响应){
var term=$.ui.autocomplete.escapeRegex(request.term)
,startsWithMatcher=newregexp(“^”+术语“i”)
,startsWith=$.grep(源,函数(值){
返回startsWithMatcher.test(value.label | | value.value | | value);
})
,containsMatcher=newregexp(术语“i”)
,contains=$.grep(源,函数(值){
返回$.inArray(值,startsWith)<0&&
容器匹配器测试(value.label | | value.value | | value);
});
响应(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());

这里有一个修改过的提琴来说明:

只要有35k条记录,你就可能想使用MySQL查询,而不是从哪里获得机场名称(你真正的来源是什么)?通常像这样的开放数据集合提供可选的GET参数,您可以使用这些参数设置搜索词和排序。所以所有的逻辑通常都发生在源代码的服务器端。你应该把它放到数据库中。什么是“二进制排序”???不,两次过滤一个很长的列表并不像只过滤一次那样有效。@Bergi,我想他是在引用二进制搜索。但是,我不知道他为什么需要这个。一些以字符shud开头的术语将首先显示。你的方法是令人兴奋和简单的几个例子。但我想正则表达式方法涵盖了所有光谱,但我相信问题更复杂。由于有多个键、值对,结果应该是这样的:最初显示精确匹配,然后显示相似的值。你怎么认为?例如,谷歌航班将如何做到这一点。更可取的是,最终列表将基于位置。无论匹配的是什么,根据用户的国家/地区显示前几个项目,然后像往常一样显示其余项目。此时,您讨论的是一个抽象的可用性问题,这实际上只是您的偏好问题。crud方法不会将这一点带到需要改进方法的可用性。