在客户端搜索对象

Searching through objects, client-side?

本文关键字:对象 搜索 客户端      更新时间:2023-09-26

我在内存客户端有50-100个对象。我需要搜索他们没有标签,只是文本搜索对象的每个字段,并找到匹配或部分匹配。

做这类搜索的最好方法是什么,我如何根据相关性列出它们?

元素列表:

如果你想在元素中查找文本,试试这个:

$(":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()

您可能想看看这个:

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

对于您的集合中的每个对象(与50-100我假设它们保存在一个数组中,或者jQuery选择的结果),使用Object.keys获取属性名称,然后获取相关值并执行您的匹配。

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