Javascript 使用多种数据类型的Javascipt动态过滤器

Javascript 使用多种数据类型的Javascipt动态过滤器,javascript,arrays,json,Javascript,Arrays,Json,我有下面的JSON数据,另一个数组是我的过滤器 那些过滤器我想从这个对象数组中获取数据 在我的过滤器数组中有3个对象,对象的键是 此数据数组的键 在过滤器中每个键在数组中都有值列表。这些数组字段是此数据数组的值 使用此选项,我想过滤,过滤器可以是动态的 仅举过滤器数组中的示例 有区域键,因此我将检查以下数据中的区域列表 然后在下一个键中,有带有一些字段的项键,然后我将过滤同一区域下的项键数据 然后在下一个键中,有Rep key和一些字段,然后我将过滤同一项下的Rep key数据 而过滤器是动态字

我有下面的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
  }
]