Javascript 使用多种数据类型的Javascipt动态过滤器
我有下面的JSON数据,另一个数组是我的过滤器 那些过滤器我想从这个对象数组中获取数据 在我的过滤器数组中有3个对象,对象的键是 此数据数组的键 在过滤器中每个键在数组中都有值列表。这些数组字段是此数据数组的值 使用此选项,我想过滤,过滤器可以是动态的 仅举过滤器数组中的示例 有区域键,因此我将检查以下数据中的区域列表 然后在下一个键中,有带有一些字段的项键,然后我将过滤同一区域下的项键数据 然后在下一个键中,有Rep key和一些字段,然后我将过滤同一项下的Rep key数据 而过滤器是动态字段,可能或多或少都是动态字段 在下面给出的代码中,我使用它来过滤下拉类型,而不是范围或日期类型 下拉列表我的过滤器中的类型用于过滤字符串字段 范围我的过滤器中的类型用于过滤数字字符串字段 日期我的筛选器中的类型用于筛选日期范围字段Javascript 使用多种数据类型的Javascipt动态过滤器,javascript,arrays,json,Javascript,Arrays,Json,我有下面的JSON数据,另一个数组是我的过滤器 那些过滤器我想从这个对象数组中获取数据 在我的过滤器数组中有3个对象,对象的键是 此数据数组的键 在过滤器中每个键在数组中都有值列表。这些数组字段是此数据数组的值 使用此选项,我想过滤,过滤器可以是动态的 仅举过滤器数组中的示例 有区域键,因此我将检查以下数据中的区域列表 然后在下一个键中,有带有一些字段的项键,然后我将过滤同一区域下的项键数据 然后在下一个键中,有Rep key和一些字段,然后我将过滤同一项下的Rep key数据 而过滤器是动态字
var data = [
{
"OrderDate": "2019-01-06",
"Region": "East",
"Rep": "Jones",
"Item": "Pencil",
"Units": 95,
"Unit Cost": " 1.99 ",
"Total": " 189.05 ",
"unique_index": 0
},
{
"OrderDate": "2019-01-23",
"Region": "Central",
"Rep": "Kivell",
"Item": "Binder",
"Units": 50,
"Unit Cost": " 19.99 ",
"Total": " 999.50 ",
"unique_index": 1
},
{
"OrderDate": "2019-03-15",
"Region": "West",
"Rep": "Sorvino",
"Item": "Pencil",
"Units": 56,
"Unit Cost": " 2.99 ",
"Total": " 167.44 ",
"unique_index": 4
},
{
"OrderDate": "2019-04-01",
"Region": "East",
"Rep": "Jones",
"Item": "Binder",
"Units": 60,
"Unit Cost": " 4.99 ",
"Total": " 299.40 ",
"unique_index": 5
},
{
"OrderDate": "2020-05-22",
"Region": "West",
"Rep": "Thompson",
"Item": "Pencil",
"Units": 32,
"Unit Cost": " 1.99 ",
"Total": " 63.68 ",
"unique_index": 8
},
{
"OrderDate": "2019-06-08",
"Region": "East",
"Rep": "Jones",
"Item": "Binder",
"Units": 60,
"Unit Cost": " 8.99 ",
"Total": " 539.40 ",
"unique_index": 9
},
{
"OrderDate": "2020-07-12",
"Region": "East",
"Rep": "Jones",
"Item": "Binder",
"Units": 29,
"Unit Cost": " 1.99 ",
"Total": " 57.71 ",
"unique_index": 11
},
{
"OrderDate": "2020-08-15",
"Region": "East",
"Rep": "Jones",
"Item": "Pencil",
"Units": 4,
"Unit Cost": " 4.99 ",
"Total": " 174.65 ",
"unique_index": 13
}
];
var filters = [
{
"Region": {
"fields": [
"East"
],
"type": "dropdown"
}
},
{
"Item": {
"fields": [
"Binder",
"Pencil"
],
"type": "dropdown"
}
},
{
"Rep": {
"fields": [
"Jones"
],
"type": "dropdown"
}
},
{
"Units": {
"from": "1",
"type": "range",
"to": "40"
}
},
{
"OrderDate": {
"start": "2020-01-01",
"type": "date",
"end": "2021-01-01"
}
}
];
var filteredData = data.filter(dataItem =>
filters.reduce((pv, cv) => {
var filterKey = Object.keys(cv)[0];
var filterValues = cv[filterKey].fields;
return pv && filterValues.includes(dataItem[filterKey]);
}, true)
);
console.log(filteredData);
超常成绩
[
{
"OrderDate": "2020-07-12",
"Region": "East",
"Rep": "Jones",
"Item": "Binder",
"Units": 29,
"Unit Cost": " 1.99 ",
"Total": " 57.71 ",
"unique_index": 11
},
{
"OrderDate": "2020-08-15",
"Region": "East",
"Rep": "Jones",
"Item": "Pencil",
"Units": 4,
"Unit Cost": " 4.99 ",
"Total": " 174.65 ",
"unique_index": 13
}
]