假设我有一个电子邮件数组,我想过滤一个特定的域,如:
const emails = ['test@hotmail.com', 'test@gmail.com', 'test@yahoo.com']
const excludedDomain = '@hotmail';
// This works fine
const eligibleEmails = emails.filter(email => !emails.includes(excludedDomain));
console.log(eligibleEmails);
我尝试使用一些(),但它返回一个布尔值,我需要返回一个新的过滤数组。试图混合filter()
和some()
,但不工作。
在原来的过滤器中使用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' ]
将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);
下面的代码片段通过excludedDomains过滤电子邮件,以返回符合条件的电子邮件。
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);