У меня ниже JSON данные , а другой массив - это мои фильтры , использующие эти фильтры Я хочу получить данные из этого массива объектов.
В моем массиве filters есть 3 объекта, а ключи объектов являются ключами этого массива данных .
И в фильтрах каждый ключ имеет список значений в массиве. Эти массивы поля являются значениями этого массива данных.
Используя это, я хочу фильтровать , и фильтр может быть динамическим c.
Просто пример в массиве Filters есть ключ региона, поэтому я проверю список регионов в приведенных ниже данных, затем в следующем ключе есть ключ элемента с некоторыми полями, затем я буду фильтровать Данные ключа элемента в том же регионе, тогда в следующем ключе есть ключ Rep с некоторыми полями, тогда я буду фильтровать данные ключа Rep в том же элементе
И фильтр - это динамический c поля могут быть более или менее
В приведенном ниже коде я использую его для фильтрации раскрывающегося типа, а не диапазона или типа даты
раскрывающийся список тип в моем фильтре для фильтрации строковых полей
диапазон тип в моем фильтре должен фильтровать числовые c строковые поля
дата тип в моем фильтре для фильтрации поля диапазона дат
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
}
]