我想过滤客户端的JSON对象。在那之前,我用服务器端做了一个:
SELECT * FROM table WHERE row1, row2, row3 LIKE %search%
我想用JSON对象对客户端做同样的事情。
例如,我可以拥有这个JSON对象:
[{'Key1' : 'Value1', 'Key2': 'Value2'}
{'Key3': 'Value3', 'Key4': 'Value4'}]
当我使用过滤器'ue3'时,我希望它返回[{'Key3': 'Value3', 'Key4': 'Value4'}]
答案 0 :(得分:5)
“我想在一个对象数组上进行所有字段搜索,只返回在其中一个字段中包含搜索字符串部分的对象。”
var a = [{'Key1' : 'Value1', 'Key2': 'Value2'},
{'Key3': 'Value3', 'Key4': 'Value4'}];
var b = filterValuePart(a, "ue3");
function filterValuePart(arr, part) {
return arr.filter(function(obj) {
return Object.keys(obj)
.some(function(k) {
return obj[k].indexOf(part) !== -1;
});
});
});
垫片,垫片,垫片
使其不区分大小写:
function filterValuePart(arr, part) {
part = part.toLowerCase();
return arr.filter(function(obj) {
return Object.keys(obj)
.some(function(k) {
return obj[k].toLowerCase().indexOf(part) !== -1;
});
});
});
答案 1 :(得分:1)
假设您有这个JavaScript对象:
var array = [
{'Key1' : 'Value1', 'Key2': 'Value2'},
{'Key3': 'Value3', 'Key4': 'Value4'}
];
然后您可以使用
找到属性值包含字符串的对象var searched = 'ue3';
var matches = array.filter(function(v) {
for (key in v) {
if (v[key].indexOf(searched)!=-1) return true;
}
return false;
});
var match = matches.length==0 ? null : matches[0];
请注意,IE 8不支持过滤器this MDN article gives a shim。
答案 2 :(得分:0)
@Ping - 你可以使用javascript lib DefiantJS(http://defiantjs.com)。有了它,你可以这样做:
var data = [
{
"Key1": "Value1",
"Key2": "Value2"
},
{
"Key3": "Value3",
"Key4": "Value4"
}
].
res = JSON.search( data, '//*[contains(., 'ue3')]' );
console.log( res[0].key3 );
// Value3
这是一个工作小提琴:
http://jsfiddle.net/hbi99/s8ZVg/
请注意引用了JSON结构,它应该是JSON。 DefiantJS使用名为“search”的方法和XPath查询(标准化查询语言)扩展全局对象JSON,它返回数组中的匹配项(如果未找到匹配项,则返回空数组)。