通过对象,客户端搜索?
问题描述:
我在内存客户端有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