Javascript динамический фильтр c данные - PullRequest
0 голосов
/ 18 июня 2020

У меня ниже JSON данные и ниже json - это мои фильтры с использованием этих фильтров Я хочу получить данные из этого массива объектов.

В моем массиве Filters есть 3 объекта, а ключи объектов являются ключами этого массива данных .

И в фильтрах каждый ключ имеет список значений в массиве. Эти массивы поля являются значениями этого массива данных.

Используя это, я хочу фильтровать , и фильтр может быть динамическим c.

Просто пример в массиве Filters - есть ключ региона, поэтому я проверю список регионов в приведенных ниже данных, затем в следующем ключе будет ключ элемента с некоторыми полями, затем я буду фильтровать Данные ключа элемента в том же регионе, затем в следующем ключе есть ключ Rep с некоторыми полями, тогда я буду фильтровать данные ключа Rep в том же элементе

И поле filter is dynamic c может быть более или менее

Я использую этот код, но не получаю должного результата

      for(let filter of filters){
        fields = filter[Object.keys(filter)[0]].fields;
        key = Object.keys(filter)[0]
      }
      
      let new_temp_data = []
      
      for(let field of fields){
          for(let cdd=0; cdd<data.length; cdd++){
            if(data[cdd][key] === field){
              new_temp_data.push(data[cdd])
            }
          }
      }

    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": "2019-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": "2019-07-12",
        "Region": "East",
        "Rep": "Howard",
        "Item": "Binder",
        "Units": 29,
        "Unit Cost": " 1.99 ",
        "Total": " 57.71 ",
        "unique_index": 11
      },
      {
        "OrderDate": "2019-07-29",
        "Region": "East",
        "Rep": "Parent",
        "Item": "Pen",
        "Units": 81,
        "Unit Cost": " 19.99 ",
        "Total": " 1,619.19 ",
        "unique_index": 12
      },
      {
        "OrderDate": "2019-08-15",
        "Region": "East",
        "Rep": "Jones",
        "Item": "Desk",
        "Units": 35,
        "Unit Cost": " 4.99 ",
        "Total": " 174.65 ",
        "unique_index": 13
      },
      {
        "OrderDate": "2019-09-01",
        "Region": "Central",
        "Rep": "Smith",
        "Item": "Desk",
        "Units": 2,
        "Unit Cost": " 125.00 ",
        "Total": " 250.00 ",
        "unique_index": 14
      }
    ]




    filters = [
      {
        "Region": {
          "fields": [
            "East"
          ],
          "type": "dropdown"
        }
      },
      {
        "Item": {
          "fields": [
            "Binder",
            "Pencil"
          ],
          "type": "dropdown"
        }
      },
      {
        "Rep": {
          "fields": [
            "Jones"
          ],
          "type": "dropdown"
        }
      }
    ]



    expected_result = [
      {
        "OrderDate": "2019-01-06",
        "Region": "East",
        "Rep": "Jones",
        "Item": "Pencil",
        "Units": 95,
        "Unit Cost": " 1.99 ",
        "Total": " 189.05 ",
        "unique_index": 0
      },
      {
        "OrderDate": "2019-04-01",
        "Region": "East",
        "Rep": "Jones",
        "Item": "Binder",
        "Units": 60,
        "Unit Cost": " 4.99 ",
        "Total": " 299.40 ",
        "unique_index": 5
      },
      {
        "OrderDate": "2019-06-08",
        "Region": "East",
        "Rep": "Jones",
        "Item": "Binder",
        "Units": 60,
        "Unit Cost": " 8.99 ",
        "Total": " 539.40 ",
        "unique_index": 9
      }
    ]

1 Ответ

1 голос
/ 18 июня 2020

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": "2019-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": "2019-07-12",
        "Region": "East",
        "Rep": "Howard",
        "Item": "Binder",
        "Units": 29,
        "Unit Cost": " 1.99 ",
        "Total": " 57.71 ",
        "unique_index": 11
      },
      {
        "OrderDate": "2019-07-29",
        "Region": "East",
        "Rep": "Parent",
        "Item": "Pen",
        "Units": 81,
        "Unit Cost": " 19.99 ",
        "Total": " 1,619.19 ",
        "unique_index": 12
      },
      {
        "OrderDate": "2019-08-15",
        "Region": "East",
        "Rep": "Jones",
        "Item": "Desk",
        "Units": 35,
        "Unit Cost": " 4.99 ",
        "Total": " 174.65 ",
        "unique_index": 13
      },
      {
        "OrderDate": "2019-09-01",
        "Region": "Central",
        "Rep": "Smith",
        "Item": "Desk",
        "Units": 2,
        "Unit Cost": " 125.00 ",
        "Total": " 250.00 ",
        "unique_index": 14
      }
    ];




    var filters = [
      {
        "Region": {
          "fields": [
            "East"
          ],
          "type": "dropdown"
        }
      },
      {
        "Item": {
          "fields": [
            "Binder",
            "Pencil"
          ],
          "type": "dropdown"
        }
      },
      {
        "Rep": {
          "fields": [
            "Jones"
          ],
          "type": "dropdown"
        }
      }
    ];

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