JSON对象多个筛选器

JSON Object Multiple filter

本文关键字:筛选 对象 JSON      更新时间:2023-09-26

我有一个JSON对象,其中的数据在从表单中选择元素时得到过滤。我的表单包含以下元素:

Min Age - Max AgeGender - male(1) & female(2)

以下是我的JSON对象:

[
   {
      "id":"1",
      "name":"nehil",
      "gender":"1",
      "birthday":"1991-07-22",
      "business_id":"1",
      "timestamp":"2016-03-23 04:46:42",
      "age":"24"
   },
   {
      "id":"2",
      "name":"vartika ",
      "gender":"2",
      "birthday":"1990-08-14",
      "business_id":"1",
      "timestamp":"2016-03-23 04:46:46",
       "age":"25"
   },
   {
      "id":"3",
      "name":"atharva",
      "gender":"1",
      "birthday":"1992-10-10",
      "business_id":"1",
      "timestamp":"2016-03-23 04:46:49",
       "age":"23"
   },
   {
      "id":"4",
      "name":"karan",
      "gender":"1",
      "birthday":"1992-12-22",
      "business_id":"1",
      "timestamp":"2016-03-23 04:46:52",
      "age":"23"
   }
]

Gender上,选择是否为雄性,我想要对象中所有雄性的id,并将其按入阵列。稍后,如果我选择最小年龄为23,最大年龄为24,我希望在该数组中更新所有年龄以下的男性。

实现这一目标的最佳策略是什么?

以下是我的小提琴链接-http://jsfiddle.net/Nehil/2ym3ffo0/4/

您可以使用过滤器

var arrMale,arrFeMale ; 
arrMale = geGenderData(1)
arrFemale = geGenderData(2)
console.log(arrMale)
console.log(arrFemale)
    function geGenderData(intGenderNum){
        return data.filter(function(oneObj,key){
           return oneObj.gender ==intGender;
        })
    }

工作小提琴;

使用最小和最大条件可以对年龄进行类似操作

如果不需要搜索多个项目,可以使用具有特殊结构的对象进行搜索。该提案使用了一个对象,其结构用于过滤:

{ 
    gender: '1',
    age: {
        min: 23, 
        max: 24
    },
    birthday: function (s) { return s.match(/-10-10/); }
}

该算法查找search中的每个属性,如果所有比较都为true,则将元素添加到结果集中。

function filter(array, search) {
    return array.filter(function (a) {
        return Object.keys(search).every(function (k) {
            return (
                a[k] === search[k] ||
                typeof search[k] === 'object' && +search[k].min <= a[k] &&  a[k] <= +search[k].max ||
                typeof search[k] === 'function' && search[k](a[k])
            );
        });
    });
}
var data = [{ id: "1", name: "nehil", gender: "1", birthday: "1991-07-22", business_id: "1", timestamp: "2016-03-23 04:46:42", age: "24" }, { id: "2", name: "vartika ", gender: "2", birthday: "1990-08-14", business_id: "1", timestamp: "2016-03-23 04:46:46", age: "25" }, { id: "3", name: "atharva", gender: "1", birthday: "1992-10-10", business_id: "1", timestamp: "2016-03-23 04:46:49", age: "23" }, { id: "4", name: "karan", gender: "1", birthday: "1992-12-22", business_id: "1", timestamp: "2016-03-23 04:46:52", age: "23" }];
document.write('<pre>' + JSON.stringify(filter(data, { birthday: function (s) { return s.match(/-10-10/); } }), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(filter(data, { gender: '2' }), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(filter(data, { gender: '1', age: { min: 23, max: 24 } }), 0, 4) + '</pre>');