Javascript 在对象中搜索,客户端?

Javascript 在对象中搜索,客户端?,javascript,jquery,coffeescript,Javascript,Jquery,Coffeescript,我在客户端内存中有50-100个对象。我需要在没有标签的情况下搜索它们,只需文本搜索对象的每个字段并查找匹配项或部分匹配项 进行此类搜索的最佳方式是什么?我如何根据相关性列出它们 元素: 如果要在元素中查找文本,请尝试以下操作: $(":contains('your text')"); 这将返回包含文本的每个元素 对象 请参阅此演示: 还搜索子对象,当前搜索不区分大小写,如果要更改它,只需删除.toLowerCase()函数: var ob = { User : { n

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


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

元素:

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

$(":contains('your text')");
这将返回包含文本的每个元素

对象

请参阅此演示:

还搜索子对象,当前搜索不区分大小写,如果要更改它,只需删除
.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")
变化:

  • 如果不想匹配字符串的一部分,请更改:
    v.toLowerCase().indexOf(search.toLowerCase())!=-1进入
    v.toLowerCase()==search.toLowerCase()

  • 您可能想看看这个:


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


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

    我想只搜索文本值就可以了,搜索子对象就可以了。啊,非常好,基本的关联性是基于它被发现的次数?我猜可能有更好、更复杂的方法来创造相关性,比如精确的单词匹配比部分匹配更有价值,但这是一个很好的开始。谢谢。如果你想有特定的匹配,你可以将
    的indexOf
    改为
    If(v.toLowerCase()==search.toLowerCase())
    Awesome,我会用这个。你知道有哪项研究,或是一个图书馆可以把更多的逻辑推到方程式中吗?a、 是的,匹配并不意味着太多,其他的怪癖,如何加权什么,等等?它目前不会将您的搜索字符串分割为不同的可能匹配,如果您得到字符串
    我的名字是
    ,它会找到一个包含字符串
    我的名字是
    ,而不是查找每个单词的匹配。听起来这是正确的方向。我如何进行匹配,以及它如何返回相关性分数?哦,我以为你已经想到了匹配算法,只是想知道如何提取值并使用JavaScript对它们进行排序。您需要什么样的匹配?简单文本相似性?是,在文本字段中搜索匹配项或部分匹配项。谢谢。一个简单的匹配过程,不考虑相关性: