基于javascript数组中的多个属性进行过滤

时间:2014-12-12 09:38:03

标签: javascript arrays underscore.js

我有一个具有多个属性的对象数组。我需要根据许多属性过滤数组。让我们说所有具有名字的对象为" 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"
    }
  ] 
}

3 个答案:

答案 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'); 
})

请参阅:http://underscorejs.org/#filter

答案 2 :(得分:0)

试试这个,

它是快速的正则表达式,除了jQuery之外不需要包含额外的js文件。

var result = $.grep(xx.aaData, function (e) { return e.firstname == 'john' && e.country == 'india' && e.age == '30'; });

其中xx是您的主要json对象