我有一个具有多个属性的对象数组。我需要根据许多属性过滤数组。让我们说所有具有名字的对象为" John"谁住在"印度"和" 30"年龄。
我通过在每次过滤后添加&&
条件来完成此操作,但我计划在项目中使用Underscore.js。如果Underscore.js可以帮助我以更优雅的方式写作,请告诉我吗?
Json数据:
{
"recordsTotal": 5,
"recordsFiltered": 5,
"aaData": [
{
"firstname": "John",
"lastname": "Kumar",
"city": "Dhaka",
"country": "Bangladesh",
"age": "30"
},
{
"firstname": "John",
"lastname": "Wells",
"city": "Katmandu",
"country": "Nepal",
"age": "28"
},
{
"firstname": "Praveen",
"lastname": "Garg",
"city": "columbo",
"country": "Srilanka",
"age": "40"
},
{
"firstname": "Joe",
"lastname": "Wells",
"city": "Luton",
"country": "UK",
"age": "12"
},
{
"firstname": "Rita",
"lastname": "Wahlin",
"city": "houston",
"country": "USA",
"age": "28"
}
]
}
答案 0 :(得分:1)
看一下下划线的过滤方法,你可以在一个对象列表中传递它,并随意指定对象的每个字段的约束:
var filtered = _.filter(data, function(item){
return item.firstname == "John" && item.country == "India" && item.age == 30;
});
或者如果你有一个用户可定义的过滤器列表,你可以:
var filters = {
"firstname":"John",
"country":"India",
"age":"30"
}
var filtered = _.filter(data, function(item){
for(filter in filters){
if(item[filter] != filters[filter]){ return false;}
}
return true;
});
答案 1 :(得分:0)
有一个函数_.filter,它允许您将集合的每个元素传递给函数,以测试是否将它包含在返回的已过滤列表中。
所以我认为你需要这样的东西:
var filtered = _filter(data.aaData, function(item) {
return (item.firstname == 'John') && (item.country == 'India') && (age == '30');
})
答案 2 :(得分:0)
试试这个,
它是快速的正则表达式,除了jQuery之外不需要包含额外的js文件。
var result = $.grep(xx.aaData, function (e) { return e.firstname == 'john' && e.country == 'india' && e.age == '30'; });
其中xx是您的主要json对象