【问题标题】:Compare two arrays and after regex return unique values比较两个数组并在正则表达式之后返回唯一值
【发布时间】:2016-06-25 08:29:48
【问题描述】:

我有两个数组。一个包含电子邮件列表,另一个包含匹配时应被拒绝的字符串列表。

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 中删除无效的电子邮件以便我得到 ​​p>

array3 = [ 'appstore@myntra.com',
  'life@updates.cricinfo.com',
  'pqr@gmail.com',
  'whatsup@gmail.com',
  'some@relatas.com',
  'smqwe@gmail.com' ]

【问题讨论】:

  • 除了循环遍历 arr1 的每个值,如果与 arr2 匹配,则从 arr1 拼接该值,我没有看到任何其他方法。这对你有用吗?或者您正在寻找优化的解决方案?
  • 这可行,但始终首选优化的解决方案。

标签: javascript arrays regex underscore.js


【解决方案1】:

你基本上可以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)
    });
});

【讨论】:

  • 我尝试了 Thomas 的编辑。它不起作用。亚当的原作确实有效。
  • 使用some 而不是forEach
  • 感谢您的提示,@torazaburo,some 好多了。
【解决方案2】:

您已经用下划线标记了问题,所以我认为您使用下划线...然后使用临时数组并巧妙地迭代:

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;

【讨论】:

  • 对不起 - 我已经监督了,array3 应该保存剩余的邮件 - 我的方法显示了如何拆分为两个数组 - 一个具有有效地址,一个具有无效地址,但我认为你看到了魔法并且可以根据需要使用它
猜你喜欢
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 2020-08-02
  • 1970-01-01
相关资源
最近更新 更多