[英]Searching through objects, client-side?
我在內存客戶端有50-100個對象。 我需要搜索沒有標簽的文本,而只是搜索對象的每個字段並查找匹配項或部分匹配項的文本。
進行此類搜索的最佳方法是什么,如何根據相關性列出它們?
內容:
如果要在元素內查找文本,請嘗試以下操作:
$(":contains('your text')");
這將返回包含your text
每個元素。
對象
觀看此演示: http : //jsfiddle.net/datyn/1/
還搜索子對象,當前搜索不.toLowerCase()
大小寫,如果要更改它,只需刪除.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得分),並使用比較器集對數組進行排序以按得分進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.