Как отфильтровать массив объектов на основе другого массива объектов? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть два массива объектов, как показано ниже

conditions= [
          {
            'condition': 'Expert',
            'value': 'All'
          },
          {
            'condition': 'Coach',
            'value': 'willaim'
          },
          {
            'condition': 'manager',
            'value': 'Brandy Lovings'
          },
          {
            'condition': 'site',
            'value': 'ALL'
          },
          {
            'condition': 'client',
            'value': 'ALL'
          }
        ]

data=[
{
          "Date": "11/6/2018",
          "client": "Verizon",
          "Expert": "Ellison, Lauren",
          "Coach": "willaim",
          "manager": "Brandy Lovings",
          "site": "Sundance",
          "Metric": "STR"
        },
{
          "Date": "11/6/2018",
          "client": "Amzaon",
          "Expert": "Ellison, Lauren",
          "Coach": "Dash Williamson",
          "manager": "David",
          "site": "abc",
          "Metric": "STR"
        }
]

Я хочу отфильтровать массив данных с помощью массива условий, например, если свойство условия в массиве условий содержит Expert, тогда мне нужно отфильтровать массив данных на основе data.Expert = conditions[Expert Conditionindex].value, затем мне нужно вернуть все данные с этими условиями.

Другое дело, если value: 'ALL', тогда нет необходимости фильтровать в этом конкретном состоянии.

Желаемый вывод похож на

filteredData = [
{
              "Date": "11/6/2018",
              "client": "Verizon",
              "Expert": "Ellison, Lauren",
              "Coach": "willaim",
              "manager": "Brandy Lovings",
              "site": "Sundance",
              "Metric": "STR"
            }
]

Как мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Вы можете фильтровать с подмножеством условий без флага ALL.

var conditions = [{ condition: "Expert", value: "All" }, { condition: "Coach", value: "willaim" }, { condition: "manager", value: "Brandy Lovings" }, { condition: "site", value: "ALL" }, { condition: "client", value: "ALL" }],
    data = [{ Date: "11/6/2018", client: "Verizon", Expert: "Ellison, Lauren", Coach: "willaim", manager: "Brandy Lovings", site: "Sundance", Metric: "STR" }, { Date: "11/6/2018", client: "Amzaon", Expert: "Ellison, Lauren", Coach: "Dash Williamson", manager: "David", site: "abc", Metric: "STR" }],
    filters = conditions.filter(({ value }) => value.toUpperCase() !== 'ALL'),
    result = data.filter(o =>
        filters.every(({ condition, value }) => o[condition] === value));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 13 мая 2019

Это должно работать для вас:

    const conditionsObj={}

    conditions.filter(({value})=>value.toLowerCase()!=='all').forEach((condition)=>{
          conditionsObj[condition.condition]=condition.value
        })



     const results=data.filter((item)=>{
              let match=false;  
             Object.keys(conditionsObj).forEach((_key)=>{
                if(conditionsObj[_key]===item[_key]){
                  match=true;
                }
              })
              return match;
            })

console.log(results)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...