我在内存客户端有50-100个对象。我需要在没有标签的情况下搜索它们,只需搜索对象的每个字段并查找匹配或部分匹配。
进行此类搜索的最佳方式是什么,如何根据相关性列出?
答案 0 :(得分:1)
<强>元素:强>
如果您想在元素中查找文本,请尝试以下操作:
$(":contains('your text')");
这将返回包含your text
的每个元素。
<强>物件强>
请参阅此演示:http://jsfiddle.net/datyn/1/
同时搜索子对象,当前搜索Case Insensitive,如果要更改它,只需删除.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()
答案 1 :(得分:0)
你可能想看看这个:
答案 2 :(得分:0)
对于集合中的每个对象(使用50-100我假设它们可能保存在数组中,或者是jQuery选择的结果),使用Object.keys
获取属性名称,然后获取关联的值,执行你的比赛。
由于您的匹配返回相关性分数,您可以将所有匹配放入一对数组(匹配x分数)并进行数组排序,并将比较器设置为按分数进行比较。