Javascipt Dynami c фильтр с использованием нескольких типов данных - PullRequest
1 голос
/ 19 июня 2020

У меня ниже 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
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...