我正在撰寫一些 Google Apps 腳本來獲取每個 Google 組并列出其成員,然后將其輸出到 Google 表格。目前,我正在獲取每個組和電子郵件地址并將其推送到memberArr,但是我想“合并”相關資訊。
因此,例如,如果我有 X 個組并且第 1 組有 4 個成員(Foo、Bar、Baz 和 Quux) - 目前,它將輸出為
[ [ 'Group 1', 'Foo' ],
[ 'Group 1', 'Bar' ],
[ 'Group 1', 'Baz' ],
[ 'Group 1', 'Quux' ] ]
但我想讓它輸出為[Group 1, Foo, Bar, Baz, Quux].
也就是合并memberArr有共同Group的地方的內容
到目前為止,這是我的代碼:
function getAllGroupsTEST() {
const groupArr = [];
let gPageToken;
let gPage;
do {
gPage = AdminDirectory.Groups.list({
customer: "my_customer",
maxResults: 100,
gPageToken
});
const groups = gPage.groups;
if (groups) {
groups.forEach(({email}) => {
const groupEmail = email;
groupArr.push(groupEmail);
});
}
gPageToken = gPage.nextPageToken;
} while (gPageToken);
console.log(`LOGGING GROUPS:\n\n${groupArr}`);
const memberArr = [];
let mPageToken;
let mPage;
groupArr.forEach(group => {
mPage = AdminDirectory.Members.list(group,{
customer: "my_customer",
maxResults: 500,
mPageToken
})
const members = mPage.members;
if (members) {
// console.log(`LOGGING ${members.length} MEMBERS FOR ${group}\n\n${members}`)
members.forEach(member => {
// console.log(`MEMBER: ${member.email} IS IN GROUP ${group}`)
memberArr.push([group, member.email])
})
}
})
// console.log(`COUNTED ${groupArr.length} GROUPS`)
// console.log(memberArr)
}
任何幫助將不勝感激!
編輯:更新為按原樣而不是表格格式顯示 memberArr。
uj5u.com熱心網友回復:
我建議轉換物件中的陣列,然后以這種方式回傳陣列:
var arr = [
['group1','a'],
['group1','b'],
['group2','c'],
['group2','d'],
['group3','e']
]
var obj = {}
for (var a of arr) {
try { obj[a[0]].push(a[1]) }
catch(e) { obj[a[0]] = [a[1]] }
}
console.log(obj);
var new_arr = [];
for (var group in obj) {
new_arr.push([group, ...obj[group]])
}
console.log(new_arr);
輸出:
[ [ 'group1', 'a', 'b' ], [ 'group2', 'c', 'd' ], [ 'group3', 'e' ] ]
uj5u.com熱心網友回復:
我喜歡@YuriKhristich 解決方案。但是,我仍然想發布這段代碼,展示如何對現有代碼進行一些小的更改以構建所需的資料結構。
我們首先使用群組電子郵件初始化一個串列。接下來,我們將所有成員電子郵件附加到串列中。最后我們將完成的串列推送到 memberArr。這樣做的好處是在讀取資料時構建所需的資料格式,而不是在之后嘗試重新處理它。
let list = [group]; // <-- ADD
if (members) {
members.forEach(member => {
// memberArr.push([group, member.email]) <-- REMOVE
list.push(member.email); // <-- ADD
})
memberArr.push(list); // <-- ADD
}
})
// Simulated Google Groups data
var gPage = {
groups: [
{id: 1, name: "Group 1", email: "[email protected]" },
{id: 2, name: "Group 2", email: "[email protected]" },
{id: 3, name: "Group 3", email: "[email protected]" }
]
};
var mPage = {
members: [
{id: 1, role: "admin", email: "[email protected]" },
{id: 2, role: "admin", email: "[email protected]" },
{id: 3, role: "admin", email: "[email protected]" },
{id: 4, role: "admin", email: "[email protected]" },
{id: 5, role: "admin", email: "[email protected]" }
]
};
function getAllGroupsTEST() {
const groupArr = [];
let gPageToken;
//let gPage;
do {
/* useing fake data
gPage = AdminDirectory.Groups.list({
customer: "my_customer",
maxResults: 100,
gPageToken
});
*/
const groups = gPage.groups;
if (groups) {
groups.forEach(({email}) => {
const groupEmail = email;
groupArr.push(groupEmail);
});
}
gPageToken = gPage.nextPageToken;
} while (gPageToken);
const memberArr = [];
let mPageToken;
//let mPage;
groupArr.forEach(group => {
/* using fake data
mPage = AdminDirectory.Members.list(group,{
customer: "my_customer",
maxResults: 500,
mPageToken
})
*/
const members = mPage.members;
let list = [group];
if (members) {
members.forEach(member => {
// memberArr.push([group, member.email])
list.push(member.email);
})
memberArr.push(list);
}
})
return memberArr;
}
console.log( getAllGroupsTEST() );
uj5u.com熱心網友回復:
您可以為要過濾的每個組實作這個簡單的功能
考慮到這將消除陣列的每個重復項。
const dataToFiler = [['Group 1', 'Foo'],
['Group 1', 'Bar'],
['Group 1', 'Baz'],
['Group 1', 'Quux']]
const filterRD = (arr) => {
return [...new Set(arr.flat())]
}
console.log(filterRD(dataToFiler))
檔案
- 放
- Array.prototype.flat()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/457232.html
