2015-06-23 34 views
0

所以,我不確定是否有更好的方法來處理我正在做的事情,但實際上我有一個約12,000個元素的數組,每個元素都有一個鍵的格式:textbox通過數組搜索數字並顯示最接近的結果

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的數組搜索...

任何提示或幫助?謝謝。

+0

所以你想只有「黑色」,「紅色」,「藍色」自動完成? 「key1」,「key2」重要嗎? – aadarshsg

回答

1

我不知道,如果這你找什麼,提供你的陣列或AJAX

https://github.com/devbridge/jQuery-Autocomplete

阿賈克斯查找你可以在本地使用它:

$('#autocomplete').autocomplete({ 
    serviceUrl: '/autocomplete/countries', 
    onSelect: function (suggestion) { 
     alert('You selected: ' + suggestion.value + ', ' + suggestion.data); 
    } 
}); 

本地查找(no 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); 
    } 
}); 
+0

非常完美。謝謝。 – Simon

0

領取鑰匙:

Object.keys(arrayObj) 

向上述密鑰列表進行前綴搜索,

Object.keys(arrayObj).filter(function(key){ return key.substring(0, input.length) === input }) 

如果你想進一步優化這一點,看看像特里數據結構。

JavaScript Trie Performance Analysis