<div><input id="find" type="text"/></div>
//Искалка:
$('#find').live('click', function(){
$.get("showEstimate",function(e){
$('#find').keyup(function(){
searchText = $('#find').val().toLowerCase();
searchWord = searchText.toLowerCase().split(' ');
for(var i = 0; i < e.length; i++){
e[i].rating = 0;
for(var j = 0; j < searchWord.length; j++){
if(searchWord[j].length > 2){
// console.log(searchWord.length + '->' + searchWord[j].length);
var ename = e[i].ename.toLowerCase();
if(ename.indexOf(searchWord[j]) > -1){
// console.log(ename + '->' + searchWord[j] + '->' + ename.indexOf(searchWord[j]));
e[i].rating ++;
}
}
}
// console.log(e[i].rating);
}
Array.prototype.sort.call(e, function(a, b) {
return a['rating'] > b['rating'] ? -1 : a['rating'] < b['rating'] ? 1 : 0;
});
for(i = 0; i < e.length; i ++){
if(e[i].rating > 0){
printEstimate(e, 3);
// console.log(JSON.stringify(e[i]));
}
}
});
}, 'json');
});
Суть такая: при клике в поле поиска подгружается - $.get массив данных (название, номер). При вводе каждой буквы срабатывает ф-ция .keyup. Введенный текст searchText переводится в нижний регистр, дробится на слова searchWord.
Далее для каждой строчки массива данных (где мы ищем) прогоняется цикл, проверяющий на вхождение каждого из введенных слов на наличие в строчке массива. Если есть совпадение , то rating повышается. Ну а далее выводится по рейтингу, те строчки, где больше совпадений.
Внимание, вопрос: Работать то работает, но тормозит: при обработке массива из двух тысяч строк и двух введенных слов у мозилы занимает 15 сек. Как исправить?