所以,我不确定是否有更好的方法可以做我想做的事情,但实际上我有一个大约12,000个元素的数组,每个元素都有一个格式为:
var arrayObj = {
"blue": 'key1',
"orange": 'key2',
"red": 'key3',
"black": 'key4',
//ect...
}
我有一个文本框并使用javascript每个按键应检查新结果。我想根据文本框中输入的内容显示数组中前5个最相关的结果。例如,如果我输入bl
,结果应为blue
和black
等。
$('#searchBox').keypress(function() {
madeSearch();
}
function madeSearch() {
var isInArray = [];
if($.inArray($('#searchBox').value, arrayObj) > -1) {
//get arrayObj entry and key.
}
}
我很困惑,因为我以前从未使用过javascript数组键,而且我不确定如何获得它们以及搜索长度为12,000的数组的最佳做法是什么......
任何提示或帮助?感谢。
答案 0 :(得分:1)
我不确定你所寻找的是否可以通过提供你的数组或ajax在本地使用它
https://github.com/devbridge/jQuery-Autocomplete
Ajax查找:
$('#autocomplete').autocomplete({
serviceUrl: '/autocomplete/countries',
onSelect: function (suggestion) {
alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
}
});
本地查询(无ajax):
var countries = [
{ value: 'Andorra', data: 'AD' },
// ...
{ value: 'Zimbabwe', data: 'ZZ' }
];
$('#autocomplete').autocomplete({
lookup: countries,
onSelect: function (suggestion) {
alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
}
});
答案 1 :(得分:0)
获取密钥:
Object.keys(arrayObj)
要在上面的键列表中执行前缀搜索,
Object.keys(arrayObj).filter(function(key){ return key.substring(0, input.length) === input })
如果您想进一步优化,请查看Trie等数据结构。