比较字符串与谷歌应用程序脚本

时间:2015-09-11 14:24:07

标签: google-apps-script

这是我的目的: 我想创建一个脚本,当您选择不同的用户组时,它会显示这些组的每个成员。此外(稍后),它将仅允许显示所有选定组中的用户。

这是我的问题: 我有一个变量,可以逐个存储我选择的组中的用户。但如果用户在两个组中,他将被存储两次。 (这个问题将在我的脚本的第二部分再次得到满足......)

这是我的代码:

function membreAssocGroupe()
{
  var email = " ";
  var  groupes = ["bzbzabbzbza@brbrbzbaba.com","bzbzabbzbza@brbrbzbaba2.com","bzbzabbzbza@brbrbzbaba3.com"]; // this is groups i selected 

  //checking in "var groupes" all values that are registered.
   for (var g in groupes) {
     //opening the group by the e-mail and getting all the users in "var users" of the group.
     var group = GroupsApp.getGroupByEmail(groupes[g]);
     var users = group.getUsers();

     //for all the users get in "var users", we will copy their e-mail in "var e-mail"
     for (var u in users){
       //if the user e-mail is already saved in "var email", go to the next user.
       if(email.indexOf(u)>0)
       {
         continue;
       }
       //if the user e-mail is not saved, copy it in "var email".
       else
       {
       email = email +  users [u] .getEmail () + email.indexOf(u) + "  ";
        }
     }

    //to see what i get 
     var s = s + "\n" + "Group " + groupes[g] + " has " + users.length +
     " members:\n " + email + "\n \n ";
   }

     Logger.log(s);
}

正如您现在所理解的,问题在于此部分(此操作中的所有条目都为-1):

   if(email.indexOf(u)>0)
   {
     continue;
   }

我尝试了很多东西:

if(email.toString().match(u)==u)
if(email.match(u)==u.toString())
if(email.toString().match(u.toString())==u.toString())
if(email.toString().match(u)==u.toString())

等...(这种方式适用于电子表格中的单元格,但无法使其在此处运行)

但也 findText和其他我甚至不记得的功能。

正如你所看到的(因为我解释问题的方式,以及我糟糕的代码:p),我是一个努力的新手,最后通过一点一点的学习取得成功。如果你能告诉我我应该使用的功能,以及为什么它比其他功能更好,我会非常感激。

2 个答案:

答案 0 :(得分:0)

如果我完全理解你想要列出所有群组中的所有电子邮件,但又不想重复。

通常这必须有效:

function membreAssocGroupe(){
  var emails = [];
  var  groupes = ["GROUP1","GROUP2"];
  for(var i in groupes){
    var group = groupes[i];
    var users = GroupsApp.getGroupByEmail(group).getUsers();
    for(var j in users){
      var email = users[j].getEmail();
      if(emails.indexOf(email) < 0){
        emails.push(email);
      }
    }
  }
  Logger.log(emails.join(","));
}

为简化管理,我使用电子邮件标签,但通过联接,您可以轻松获得字符串。

答案 1 :(得分:0)

确实有效。

我想我开始理解indexOf()。该函数是否尝试在数组中查找值,如果没有查找则返回-1,如果找到索引号,则返回

我是法语(不习惯英语术语),而且未经实验,所以我有时会误解事物。^^。

无论如何,我的问题已经解决了。谢谢你的队友!

编辑:顺便说一句,正如您已经了解的那样,您说得对,我想复制所有用户&#39;电子邮件地址,没有重复。但也是同时在所有群体中唯一的地址(但是使用你的解决方案,这现在是时间问题)。