【问题标题】:javascript array filter multiple and conditionjavascript数组过滤多个和条件
【发布时间】:2019-03-29 12:01:27
【问题描述】:

如何过滤具有多个匹配条件的 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",
  }
] 

【问题讨论】:

    标签: javascript arrays this arrow-functions


    【解决方案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' } ]
          

          【讨论】:

            猜你喜欢
            • 2015-10-28
            • 2017-08-29
            • 2017-05-28
            • 2019-03-02
            • 2020-08-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多