我在內存客戶端有50-100個對象。我需要在沒有標籤的情況下搜索它們,只需搜索對象的每個字段並查找匹配或部分匹配即可。通過對象,客戶端搜索?
做這種類型的搜索的最佳方式是什麼,我如何根據相關性列出它們?
我在內存客戶端有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")
變化:
v.toLowerCase().indexOf(search.toLowerCase()) != -1
到v.toLowerCase() == search.toLowerCase()
您可能要看看這個:
對於集合中的每個對象(使用50-100我假設它們可能保存在一個數組中,或者jQuery選擇的結果),使用Object.keys
來獲取屬性名稱,然後獲取關聯的值並執行你的比賽。
由於您的匹配返回相關性分數,您可以將所有匹配放入一個對數組(匹配x分數)中,並使用比較器進行數組排序以按比分進行比較。
我想只是搜索文本值會很好,搜索到的子對象將是理想的。 – fancy
更新了我的回答 – Niels
嗯,非常好,基本的相關性將基於它被發現的時間?我猜測可能有更好,更復雜的方法來創建相關性,比如精確的單詞匹配比部分匹配更值得,但這是一個很好的開始。謝謝。 – fancy