#javascript #arrays #this #arrow-functions
#javascript #массивы #это #функции со стрелками
Вопрос:
Как отфильтровать массив 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",
}
]
Ответ №1:
||
Так не работает
Вместо этого вы могли бы поместить значения в массив. Это позволяет легко масштабировать его для ряда условий
this.entityTypes = codeList.Values
.filter(c => ['CRD_CRE_INS','CRD_EEA_BRA'].includes(c.CodeValue) );
Ответ №2:
Выражение 'CRD_EEA_BRA'
всегда истинно, вы должны изменить код на:
this.entityTypes = codeList.Values.filter(c => c.CodeValue === 'CRD_CRE_INS' || c.CodeValue === 'CRD_EEA_BRA');
Ответ №3:
Чтобы избежать повторения ===, вы можете использовать массив целевых значений и проверить, соответствует ли элемент какому-либо из целевых значений
const values = ["CRD_CRE_INS","CRD_EEA_BRA"]
this.entityTypes = codeList.Values.filter(c => values.includes(c.CodeValue));
Ответ №4:
Не уверен, что это лучшее решение, но .. вы можете использовать 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' } ]