I am writing some Google Apps Script to get each Google Group and list it’s members then output it to a Google Sheet. Currently, I am grabbing each group and email address and pushing it to the memberArr
, however I then want to ‘merge’ the relevant information.
So if for example, I have X Groups and Group 1 has 4 members (Foo, Bar, Baz and Quux) – Currently, it will output as
JavaScript
x
5
1
[ [ 'Group 1', 'Foo' ],
2
[ 'Group 1', 'Bar' ],
3
[ 'Group 1', 'Baz' ],
4
[ 'Group 1', 'Quux' ] ]
5
But I want to have it output as [Group 1, Foo, Bar, Baz, Quux]
.
That is to say, merge the contents of the memberArr
where there is a common Group
Here is my code so far:
JavaScript
1
47
47
1
function getAllGroupsTEST() {
2
const groupArr = [];
3
let gPageToken;
4
let gPage;
5
6
do {
7
gPage = AdminDirectory.Groups.list({
8
customer: "my_customer",
9
maxResults: 100,
10
gPageToken
11
});
12
const groups = gPage.groups;
13
14
if (groups) {
15
groups.forEach(({email}) => {
16
const groupEmail = email;
17
groupArr.push(groupEmail);
18
});
19
}
20
21
gPageToken = gPage.nextPageToken;
22
} while (gPageToken);
23
24
console.log(`LOGGING GROUPS:nn${groupArr}`);
25
const memberArr = [];
26
let mPageToken;
27
let mPage;
28
29
groupArr.forEach(group => {
30
mPage = AdminDirectory.Members.list(group,{
31
customer: "my_customer",
32
maxResults: 500,
33
mPageToken
34
})
35
const members = mPage.members;
36
if (members) {
37
// console.log(`LOGGING ${members.length} MEMBERS FOR ${group}nn${members}`)
38
members.forEach(member => {
39
// console.log(`MEMBER: ${member.email} IS IN GROUP ${group}`)
40
memberArr.push([group, member.email])
41
})
42
}
43
})
44
// console.log(`COUNTED ${groupArr.length} GROUPS`)
45
// console.log(memberArr)
46
}
47
Any help would be greatly appreciated!
Edit: Updated to show the memberArr as is rather than in a table format.
Advertisement
Answer
I’d propose to convert the array in the object and then back to the array this way:
JavaScript
1
20
20
1
var arr = [
2
['group1','a'],
3
['group1','b'],
4
['group2','c'],
5
['group2','d'],
6
['group3','e']
7
]
8
9
var obj = {}
10
for (var a of arr) {
11
try { obj[a[0]].push(a[1]) }
12
catch(e) { obj[a[0]] = [a[1]] }
13
}
14
console.log(obj);
15
16
var new_arr = [];
17
for (var group in obj) {
18
new_arr.push([group, obj[group]])
19
}
20
console.log(new_arr);
Output:
JavaScript
1
2
1
[ [ 'group1', 'a', 'b' ], [ 'group2', 'c', 'd' ], [ 'group3', 'e' ] ]
2