在客户端搜索对象?

时间:2011-11-21 08:21:10

标签: javascript jquery coffeescript

我在内存客户端有50-100个对象。我需要在没有标签的情况下搜索它们,只需搜索对象的每个字段并查找匹配或部分匹配。

进行此类搜索的最佳方式是什么,如何根据相关性列出?

3 个答案:

答案 0 :(得分:1)

<强>元素:

如果您想在元素中查找文本,请尝试以下操作:

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

这将返回包含your text的每个元素。

<强>物件

请参阅此演示:http://jsfiddle.net/datyn/1/

同时搜索子对象,当前搜索Case Insensitive,如果要更改它,只需删除.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()

答案 1 :(得分:0)

你可能想看看这个:

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

答案 2 :(得分:0)

对于集合中的每个对象(使用50-100我假设它们可能保存在数组中,或者是jQuery选择的结果),使用Object.keys获取属性名称,然后获取关联的值,执行你的比赛。

由于您的匹配返回相关性分数,您可以将所有匹配放入一对数组(匹配x分数)并进行数组排序,并将比较器设置为按分数进行比较。