javascript数组过滤倍数和条件

javascript array filter multiple and condition

如何过滤具有多个匹配条件的 javascript 数组。 下面的代码 returns 所有数据,而不仅仅是 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",
  }
] 

表达式'CRD_EEA_BRA'始终为真,您必须将代码更改为:

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

|| 不是这样的

您可以将值放在数组中。这使得它很容易根据条件数量进行扩展

this.entityTypes = codeList.Values
                   .filter(c => ['CRD_CRE_INS','CRD_EEA_BRA'].includes(c.CodeValue) );

为避免重复 ===,您可以使用目标值数组并检查元素是否与任何目标值匹配

const values = ["CRD_CRE_INS","CRD_EEA_BRA"]
this.entityTypes = codeList.Values.filter(c => values.includes(c.CodeValue));

不确定这是否是最佳解决方案,但是..您可以使用 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' } ]