gpt4 book ai didi

javascript - 选择从push.apply([user.email, user.groupName])构建的数组的左侧部分

转载 作者:行者123 更新时间:2023-12-01 01:24:37 24 4
gpt4 key购买 nike

我有一段代码可以从 Google 群组中提取用户列表,它会查看“顶级”群组,然后提取用户电子邮件及其所在的群组。对于嵌套群组,它遍历并再次执行相同操作。所以输出基本上是这样的:

| User (Column A)       | Group (Column B)      |
|---------------------- |------------------- |
| userFoo@email.com | Top Level Group |
| userBar@email.com | Top Level Group |
| userQux@email.com | Top Level Group |
| userQuux@email.com | Sub Level Group 1 |
| userCorge@email.com | Sub Level Group 2 |
| userUier@email.com | Sub Level Group 2 |
| userGrault@email.com | Sub Level Group 3 |
| userGarply@email.com | Sub Level Group 3 |
| userWaldo@email.com | Sub Level Group 3 |

顶级组中只有 3 人,其中有 3 个子组(分别有 1、2 和 3 名成员)。

它存储在一个名为output的数组中,该数组是通过使用AdminDirectory.Group.get并将primaryEmail和groupName推送到数组构建的:
output.push.apply([user.email, user.groupName])
随后将其倒入一张纸中。我想要从输出数组中获取 user.email 部分,并从中创建一个唯一的列表。我有一个生成唯一列表的函数:

function uniqueList(value, index, self) {
return self.indexOf(value) === index;
}

所以我只需要从输出中创建一个“干净”列表(意味着没有组名称信息)。当然,我可以创建另一个数组并仅将 user.email 部分推送到该数组,但感觉没有必要,因为我已经获得了该信息。

主要代码:

function extract() {
var masterSS = SpreadsheetApp.openById(
"idGoesHere"
);

var inputSheet = masterSS.getSheetByName("Input");
var topGroup = inputSheet.getRange("B1").getDisplayValue();
var outputSheet = masterSS.getSheetByName("Output");
var uniqueOutput = masterSS.getSheetByName("Unique List");

if (topGroup.length != 0) {
Logger.log(topGroup);
} else {
throw "No Group Found!";
}

try {
var users = getUsersInGroup_(topGroup);
var output = [];
// Create the list of users + groups
users.forEach(function(user) {
output.push.apply([user.email, user.groupName]);
});

if (!outputSheet) {
masterSS.insertSheet("Output");
}
SpreadsheetApp.flush();

masterSS
.getSheetByName("Output")
.getRange(1, 1, output.length, output[0].length)
.setValues(output);
SpreadsheetApp.flush();
spreadsheetCleanUp_;
} catch (e) {
Logger.log(e);
}
}

我确信这很简单,但我却一片空白。显然,我需要更多咖啡。

最佳答案

选择 native Array的一部分的功能方法是使用Array#map并返回所需的索引:

var users = ...;
var emails = users.map(function (user) { return user[0]; });

如果您需要来自多个不同位置的对象列表的当前用户电子邮件,并且修改其间的源列表,则可以将其抽象为帮助程序:

function getIndex_(userObjs, index) {
return index < 0 ? [] : userObjs.map(function (user) { return user[index]; });
}

用法将类似于:

var names = getIndex_(users, headers.indexOf("name"));

其中 headers 类似于 ["name", "email", "lastLogin", ...],用于创建 users 对象。

关于javascript - 选择从push.apply([user.email, user.groupName])构建的数组的左侧部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53911906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com