2015-09-11 4 views
0

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

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

Вот мой код:

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()) 

и т.д ... (Этот способ работал для клеток в SPRE adsheet, но нет способа сделать это здесь)

Но также findText и другие функции, о которых я даже не помню.

Как вы можете видеть (из-за моего способа объяснить проблему и моего коварного кода: p), я новичок, который много работает и, наконец, преуспевает в обучении постепенно. Если вы можете сказать мне, какую функцию я должен использовать, и почему она лучше других, я бы очень ее оценил.

ответ

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

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

0

Это действительно помогает.

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

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

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

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

+0

Я также французский ;-), и это то, что для indexOf() – St3ph