Поиск объектов, на стороне клиента? - PullRequest
2 голосов
/ 21 ноября 2011

У меня 50-100 объектов в памяти на стороне клиента. Мне нужно искать их без тегов, просто текстовый поиск в каждом поле объекта и поиск совпадений или частичных совпадений.

Каков наилучший способ поиска такого типа, как я могу перечислить их в зависимости от релевантности?

Ответы [ 3 ]

1 голос
/ 21 ноября 2011

Элементы:

Если вы хотите искать текст в элементах, попробуйте следующее:

$(":contains('your text')");

Это вернет каждый элемент, содержащий your text.

Объекты

См. Эту демонстрацию: http://jsfiddle.net/datyn/1/

Также ищет дочерние объекты, в настоящее время ищет без учета регистра, если вы хотите изменить его,просто удалите функции .toLowerCase():

var ob = {
    User : {
        name : "Niels",
        country : "Netherlands"
    },
    Name : "Niels test X"
}

function find_match(search, results)
{
    $.each(this, function(k, v){
       if( typeof(v) == "object" )
       {
            find_match.call(v, search, results);  
       }
        else
        {
             if( v.toLowerCase().indexOf(search.toLowerCase()) != -1)
             {
                 if($.inArray(this, results) == -1)
                 {
                     results.push(this);
                 }   
             }
        }
    });
}

var results = [];
find_match.call(ob, "x", results);
alert("Search for x results: " + results.length);
var results = [];
find_match.call(ob, "n", results);
alert("Search for n results: " + results.length);

Вы можете вызвать функцию с помощью метода .call.

Пример:

find_match.call("Object / array you want to search", "The string", "Array where the results will be stored")

Изменения:

  1. Если вы не хотите сопоставлять часть строки, измените: v.toLowerCase().indexOf(search.toLowerCase()) != -1 на v.toLowerCase() == search.toLowerCase()
0 голосов
/ 21 ноября 2011

Для каждого объекта в вашей коллекции (с 50-100 я предполагаю, что они, возможно, хранятся в массиве, или результат выбора jQuery), используйте Object.keys, чтобы получить имена свойств, затем захватить соответствующее значение и выполнить вашиmatch.

Поскольку ваше совпадение возвращает оценку релевантности, вы можете поместить все совпадения в массив пар (match x score) и выполнить сортировку массива с помощью компаратора, установленного для сравнения по оценке.

0 голосов
/ 21 ноября 2011

Возможно, вы захотите взглянуть на это:

http://goessner.net/articles/JsonPath/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...