JSON对象多个筛选器
JSON Object Multiple filter
我有一个JSON对象,其中的数据在从表单中选择元素时得到过滤。我的表单包含以下元素:
Min Age - Max Age
和Gender - 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>');
相关文章:
- 如何筛选对象的数组属性
- AngularJS-筛选对象中的选定属性
- 如何筛选对象数组
- jQuery按索引不一致的值筛选对象
- 按值整数筛选对象属性
- 筛选对象数组中的项
- 筛选对象中的对象数组
- 按键名筛选对象
- 按空属性/条目筛选对象
- 如何基于筛选对象筛选对象
- 筛选对象的子数组
- 在 1 个不限于文本开头的属性上筛选对象数组
- 使用原始JavaScript或undercore.js根据布尔值删除或筛选对象
- 筛选对象数组
- 按键数组筛选对象
- 筛选对象数组时出现无限摘要错误
- 如何在Javascript或Undercore中以数组元素列表为键筛选对象
- 在Javascript中筛选对象
- 使用所需键值的列表筛选对象数组
- 筛选对象数组