Javascript массив фильтров несколько и условие - PullRequest
0 голосов
/ 29 марта 2019

Как отфильтровать массив JavaScript с несколькими условиями соответствия. Приведенный ниже код возвращает все данные, а не только 2.

Код:

this.entityTypes = codeList.Values.filter(c => c.CodeValue === 'CRD_CRE_INS' || 'CRD_EEA_BRA');

Пример массива JSON: -

const codeList.Values = [{
    "CodeValue": "CRD_CRE_INS",
    "CodeValueDisplay": "CRD Credit Institution",
  },
  {
    "CodeValue": "CRD_EEA_BRA",
    "CodeValueDisplay": "EEA Branch",
  },
  {
    "CodeValue": "CRD_NON_EEA_BRA",
    "CodeValueDisplay": "Non-EEA Branch",
  }
] 

Ответы [ 4 ]

4 голосов
/ 29 марта 2019

An || не работает таким образом

Вместо этого вы можете поместить значения в массив. Это делает его легко масштабируемым для ряда условий

this.entityTypes = codeList.Values
                   .filter(c => ['CRD_CRE_INS','CRD_EEA_BRA'].includes(c.CodeValue) );
1 голос
/ 29 марта 2019

Чтобы избежать повторения ===, вы можете использовать массив целевых значений и проверить, соответствует ли элемент любому из целевых значений

const values = ["CRD_CRE_INS","CRD_EEA_BRA"]
this.entityTypes = codeList.Values.filter(c => values.includes(c.CodeValue));
1 голос
/ 29 марта 2019

Выражение 'CRD_EEA_BRA' всегда верно, вы должны изменить код на:

this.entityTypes = codeList.Values.filter(c => c.CodeValue === 'CRD_CRE_INS' ||  c.CodeValue === 'CRD_EEA_BRA');
0 голосов
/ 29 марта 2019

Не уверен, что это лучшее решение, но вы можете использовать RegExp для пользовательской фильтрации.

#Filtering function
const filterExp = (exp) => new RegExp(exp);

#Example 1
const values = data.filter((e) => filterExp('CRD').test(e.CodeValue));
console.log(values)
//Output
[ { CodeValue: 'CRD_CRE_INS',CodeValueDisplay: 'CRD Credit Institution' },
  { CodeValue: 'CRD_EEA_BRA', CodeValueDisplay: 'EEA Branch' },
  { CodeValue: 'CRD_NON_EEA_BRA',CodeValueDisplay: 'Non-EEA Branch' } ]

#Example 2
const values = data.filter((e) => filterExp('EEA').test(e.CodeValue));
console.log(values)
//Output
[ { CodeValue: 'CRD_EEA_BRA', CodeValueDisplay: 'EEA Branch' },
  { CodeValue: 'CRD_NON_EEA_BRA', CodeValueDisplay: 'Non-EEA Branch' } ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...