【问题标题】:Filter array with multiple values具有多个值的过滤器数组
【发布时间】:2022-07-08 02:52:07
【问题描述】:

假设我有一组电子邮件,我想过滤一个特定的域,例如:

const emails = ['test@hotmail.com', 'test@gmail.com', 'test@yahoo.com']
const excludedDomain = '@hotmail';

const eligibleEmails = emails.filter(email => !emails.includes(excludedDomain));
//Works!

如果我想排除多个值怎么办?

const emails = ['test@hotmail.com', 'test@gmail.com' 'test@yahoo.com']
const excludedDomains = ['@hotmail', '@yahoo'];

const eligibleEmails = ...

我尝试使用some(),但它返回一个布尔值,我需要返回一个新的过滤数组。尝试混合使用filter()some(),但没有成功。

【问题讨论】:

    标签: javascript arrays filter


    【解决方案1】:

    只需在原始过滤器中的 excludeDomain 上使用另一个过滤器。

    const emails = ['test@hotmail.com', 'test@gmail.com', 'test@yahoo.com'];
    const excludedDomains = ['@hotmail', '@yahoo'];
    
    const filtered = emails.filter(email => 
      excludedDomains.filter(ed => email.includes(ed)).length === 0
    )
    
    console.log(filtered); // [ 'test@gmail.com' ]
    

    【讨论】:

      【解决方案2】:

      filter()some()includes() 结合使用,以检查我们正在过滤的当前电子邮件中是否有任何excludedDomains includes()

      const emails = ['test@hotmail.com', 'test@gmail.com', 'test@yahoo.com']
      const excludedDomains = ['@hotmail', '@yahoo'];
      
      const eligibleEmails = emails.filter(e => !excludedDomains.some(ee => e.includes(ee)));
      console.log(eligibleEmails);

      【讨论】:

        【解决方案3】:

        下面的 sn-p 按 excludeDomains 过滤电子邮件以返回您符合条件的电子邮件。

        const emails = ['test@hotmail.com', 'test@gmail.com', 'test@yahoo.com'],
          excludedDomain = ['@hotmail', '@yahoo'],
          eligibleEmails = emails.filter(email => excludedDomain.some(str => email.indexOf(str) > -1));
        
        console.log(eligibleEmails);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-29
          • 1970-01-01
          • 1970-01-01
          • 2016-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-25
          相关资源
          最近更新 更多