2011-11-21 97 views
2

我在內存客戶端有50-100個對象。我需要在沒有標籤的情況下搜索它們,只需搜索對象的每個字段並查找匹配或部分匹配即可。通過對象,客戶端搜索?

做這種類型的搜索的最佳方式是什麼,我如何根據相關性列出它們?

回答

1

元素:

如果您想尋找文本元素中,試試這個:

$(":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()) != -1v.toLowerCase() == search.toLowerCase()
+0

我想只是搜索文本值會很好,搜索到的子對象將是理想的。 – fancy

+0

更新了我的回答 – Niels

+0

嗯,非常好,基本的相關性將基於它被發現的時間?我猜測可能有更好,更復雜的方法來創建相關性,比如精確的單詞匹配比部分匹配更值得,但這是一個很好的開始。謝謝。 – fancy

0

對於集合中的每個對象(使用50-100我假設它們可能保存在一個數組中,或者jQuery選擇的結果),使用Object.keys來獲取屬性名稱,然後獲取關聯的值並執行你的比賽。

由於您的匹配返回相關性分數,您可以將所有匹配放入一個對數組(匹配x分數)中,並使用比較器進行數組排序以按比分進行比較。

+0

這樣的聲音是在正確的方向。我如何預製我的'匹配',以及它如何返回相關性分數? – fancy

+0

哦,我想你已經有了一個匹配算法,只是想知道如何提取值並使用JavaScript對它們進行排序。你需要什麼樣的匹配?簡單的文字相似? –

+0

是的,在文本字段中搜索匹配或部分匹配。謝謝。 – fancy

相關問題