在客户端搜索对象
Searching through objects, client-side?
我在内存客户端有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()
您可能想看看这个:
http://goessner.net/articles/JsonPath/对于您的集合中的每个对象(与50-100我假设它们保存在一个数组中,或者jQuery选择的结果),使用Object.keys
获取属性名称,然后获取相关值并执行您的匹配。
由于您的匹配返回一个相关性分数,因此您可以将所有匹配放入成对数组(match x分数),并使用设置比较器进行数组排序,以按分数进行比较。
相关文章:
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用数组向下搜索Javascript对象
- 如何搜索JavaScript对象并更改值
- 具有嵌套对象数组的 Javascript 对象的递归搜索函数
- 在禁用ng的情况下搜索JSON对象(AngularJS)
- 搜索包含值的json对象键,然后取消设置
- jQuery - 在对象数组中搜索
- 如何基于键搜索充满对象的数组并返回特定对象
- 以有效的方式搜索对象列表 mongo
- findAndModify,如何对文档进行操作's数组搜索对象并更改字段值
- Lodash搜索对象属性并修改值
- 使用ng类(AngularJS)搜索JSON对象
- 如何在制作角度为2的搜索管道时过滤javascript对象
- 请求一个完整的响应对象,而不是紧凑的响应对象foursquare场地搜索api
- 在对象数组中搜索字符串
- 在 JavaScript 中从一个对象搜索到另一个对象的键/值对
- 对象搜索只在第一次工作
- Jquery对象搜索
- JavaScript对象搜索并获取所有可能的节点
- 如何在测试完成工具中等待对象搜索