Сравните строку со скриптом приложений Google

вот моя цель: я хочу создать скрипт, который, когда вы выбираете другую группу пользователей, показывает вам каждого члена этих групп. Также (позже) это позволит отображать только пользователей, которые входят во все выбранные группы.

Вот моя проблема: у меня есть переменная, в которой хранятся один за другим пользователи, которые находятся в выбранных мной группах. Но если пользователь находится в двух группах, он будет сохранен дважды. (Проблема будет встречена снова во второй части моего скрипта тааак....)

Вот мой код:

function membreAssocGroupe()
{
  var email = " ";
  var  groupes = ["[email protected]","[email protected]","[email protected]"]; // 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), я новичок, который очень старается и, наконец, преуспевает, учась понемногу. Если вы можете сказать мне функцию, которую я должен использовать, и почему она лучше, чем другие, я был бы очень признателен.


person LMS    schedule 11.09.2015    source источник


Ответы (2)


Если я хорошо понимаю, вы хотите перечислить все электронные письма во всех группах, но не хотите дублировать.

Обычно это должно работать:

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(","));
}

Чтобы упростить управление, я использую вкладку для писем, но с присоединением вы можете легко получить строку.

person St3ph    schedule 11.09.2015

Это работает спасибо.

Кажется, я начинаю понимать indexOf(). Эта функция пытается найти значение в массиве и возвращает -1, если не найдено, номер индекса, если найден?

Я француз (не привык к английским терминам) и не экспериментировал, так что иногда я что-то неправильно понимаю..^^.

в любом случае моя проблема решена. Спасибо друг!

Редактировать: Кстати, как вы уже поняли, вы были правы, я хотел скопировать адреса электронной почты всех пользователей без дубликатов. но и единственные адреса, которые есть во всех группах одновременно (но с вашим решением это уже вопрос времени).

person LMS    schedule 14.09.2015
comment
Я тоже француз ;-) и это то, что для indexOf() - person St3ph; 09.11.2015