我有两个数组。一个带有电子邮件列表,另一个带有匹配的字符串列表,应该被拒绝。
array1 = [ 'appstore@myntra.com',
'life@updates.cricinfo.com',
'pqr@gmail.com',
'noreply-de9ae870@plus.google.com',
'updates-24997849@shtyle.fm',
'whatsup@gmail.com',
'some@relatas.com',
'smqwe@gmail.com' ]
array 2 = [ /calendar-notification/i,
/feedproxy/i,
/techgig/i,
/team/i,
/blog/i,
/info/i,
/support/i,
/admin/i,
/hello/i,
/no-reply/i,
/noreply/i,
/reply/i,
/help/i,
/mailer-daemon/i,
/googlemail.com/i,
/mail-noreply/i,
/alert/i,
/calendar-notification/i,
/eBay/i,
/flipkartletters/i,
/pinterest/i,
/dobambam.com/i,
/notify/i,
/offers/i,
/iicicibank/i,
/indiatimes/i,
/info@relatas.in/i,
/facebookmail/i,
/message/i,
/facebookmail.com/i,
/notification/i,
/youcanreply/i,
/jobs/i,
/news/i,
/linkedin/i,
/list/i ]
array2包含我要拒绝的所有无效电子邮件。
如何比较这两个数组并从array1中删除无效的电子邮件,以便我得到
array3 = [ 'appstore@myntra.com',
'life@updates.cricinfo.com',
'pqr@gmail.com',
'whatsup@gmail.com',
'some@relatas.com',
'smqwe@gmail.com' ]
答案 0 :(得分:2)
你基本上可以filter
:
var newArray = array1.filter(function (elem) {
var ok = true
array2.forEach(function (tester) {
if (tester.test(elem)) {
ok = false;
}
});
return ok
});
<强>更新强>
正如@torazaburo建议的那样,使用some
我们可以有一个更清洁的解决方案:
var newArray = array1.filter(function (elem) {
return !array2.some(function (tester) {
return tester.test(elem)
});
});
答案 1 :(得分:0)
您已使用下划线标记了问题,因此我认为您使用下划线...然后使用临时数组并迭代聪明:
var array_temp = [];
while(array1.length > 0) {
var mail = array1.shift();
_.each(array2, function(expression) {
if(mail.match(expression)) {
array3.push(mail);
} else {
array_temp.push(mail);
}
});
}
array1 = array_temp; array_temp = null;