文本框使用键搜索数组并显示最接近的结果

时间:2015-06-23 01:28:41

标签: javascript jquery arrays

所以,我不确定是否有更好的方法可以做我想做的事情,但实际上我有一个大约12,000个元素的数组,每个元素都有一个格式为:

var arrayObj = {

"blue": 'key1',
"orange": 'key2',
"red": 'key3',
"black": 'key4',
//ect... 

}

我有一个文本框并使用javascript每个按键应检查新结果。我想根据文本框中输入的内容显示数组中前5个最相关的结果。例如,如果我输入bl,结果应为blueblack等。

$('#searchBox').keypress(function() {

    madeSearch();

}

function madeSearch() {
    var isInArray = [];

    if($.inArray($('#searchBox').value, arrayObj) > -1) {
        //get arrayObj entry and key. 
    }
}

我很困惑,因为我以前从未使用过javascript数组键,而且我不确定如何获得它们以及搜索长度为12,000的数组的最佳做法是什么......

任何提示或帮助?感谢。

2 个答案:

答案 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等数据结构。

JavaScript Trie Performance Analysis