在应用程序脚本中过滤存在多个子字符串

时间:2019-04-11 20:28:26

标签: javascript google-apps-script

在应用脚本中,我有一个看起来像这样的对象:

    message_objs.push({
      'body': message.getPlainBody(),
      'date' : message.getDate(),
      'from' : message.getFrom(),
      'to' : message.getTo()

    })

我正在从收件箱中收到的电子邮件中构建

我想按发件人的域过滤电子邮件,所以我可以这样做:

var substring = 'yahoo';

var filtered =  message_objs.filter(function (obj) {
 return obj['from'].indexOf(substring)>-1;
});

用于单个子字符串,但实际上我想拥有一组允许的域,例如

var substrings = ['yahoo', 'gmail' ... ];

在应用脚本中或使用ES5工具执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用Array#some来检查字符串中包含的任何内容,并使用String#includes来检查子字符串的存在。

var substrings = ['yahoo', 'gmail' ]

var filtered =  message_objs.filter(function (obj) {
   return substring.some( sub => obj['from'].includes(sub) );
});

对于具有其他Array#filter方法的旧版浏览器。

var substrings = ['yahoo', 'gmail' ]

var filtered =  message_objs.filter(function (obj) {
   return substring.filter(function(sub){
     obj['from'].indexOf(sub) > -1;
   }).length;
});

答案 1 :(得分:1)

您可以使用Javascript includes方法。

var substrings = ['yahoo', 'gmail' ... ];
var filtered =  message_objs.filter(function (obj) {
 return substrings.includes(obj['from']);
});

答案 2 :(得分:1)

请将此示例脚本视为几个答案之一。在此示例中,我使用some()来检查substrings中是否包含message_objs的值。

示例脚本:

var message_objs = [
  {from: "sample1@sample.com"},
  {from: "sample2@yahoo.com"},
  {from: "sample3@gmail.com"},
];
var substrings = ['yahoo', 'gmail'];
var filtered =  message_objs.filter(function(obj) {
  return substrings.some(function(e) {return obj['from'].indexOf(e) > -1});
});
console.log(filtered);

参考: