【发布时间】:2018-06-28 10:28:27
【问题描述】:
我有一个 Google 表单,可以在链接的电子表格中收集回复。表单中的一个字段是Username(工作表中的 B 列)。我正在编写一个脚本以在新用户(唯一用户名)提交时通知我。为此,我:
- 获取 B 列中除最新的值之外的所有值
- 获取最新用户名
- 检查最新的用户名是否在值列表中(如果没有,请执行操作)。
这是我目前所得到的:
function isUserNew() {
var spreadsheet = SpreadsheetApp.openById("INSERT ID HERE");
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
var last_row_number = sheet.getLastRow()
var penultimate_row_number = (last_row_number-1)
var latest_username = sheet.getRange(last_row_number, 2).getValue()
var usernames = sheet.getRange("B2:B" + penultimate_row_number).getValues();
}
这给了我一个二维数组usernames,看起来像[[UserA],[UserB],[UserC],[UserC],[UserA],[UserX]]. 然后我尝试了if (usernames.indexOf(latest_username) == -1,但这不起作用——它只适用于一维数组。我想过使用循环将数组转换为一维:
for (var i = 0; i < usernames.length; i++) {
Logger.log(usernames[i][0]);
}
这使得记录器可以正确记录我想要的所有用户名,但我不知道如何将它们放入数组中。
2 个主要问题:
- 如何将值放入数组而不是 Logger?
- 这是做我想做的最好的方法吗?似乎没有必要每次提交时都抓取一个 2D 数组,转换为 1D 并进行比较。列数据不会改变,每次只会增长 1。随着数据增长到 1000 多个,这将如何影响运行时间?
【问题讨论】:
-
使用
Array#map:var users1d = usernames.map(function (row) { return row[0]; });Apps 脚本有一些较新的Array方法可用 - 它们会显示在自动完成中。您可以查看它们在您选择的 JavaScript 语言参考(如 MDN)上的工作方式。 -
@tehhowch 抱歉延迟回复并感谢您的提示!
标签: arrays multidimensional-array google-apps-script google-sheets