Arrays 将列范围放入一维数组的最有效方法
我有一个谷歌表单,可以在链接的电子表格中收集回复。表单中的一个字段是Arrays 将列范围放入一维数组的最有效方法,arrays,multidimensional-array,google-apps-script,google-sheets,Arrays,Multidimensional Array,Google Apps Script,Google Sheets,我有一个谷歌表单,可以在链接的电子表格中收集回复。表单中的一个字段是用户名(工作表中的B列)。我正在编写一个脚本,当新用户(唯一用户名)提交时通知我。为此,我: 获取B列中除最新值以外的所有值 获取最新的用户名 检查最新用户名是否在值列表中(如果不在,请执行操作) 以下是到目前为止我得到的信息: function isUserNew() { var spreadsheet = SpreadsheetApp.openById("INSERT ID HERE"); var sheet = S
用户名
(工作表中的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();
}
这给了我一个2D数组usernames
,看起来像[[UserA]、[UserB]、[UserC]、[UserC]、[UserA]、[UserX]。
然后我尝试了if(usernames.indexOf(latest_username)=-1
,但这不起作用-它只适用于1D数组。我想使用循环将数组转换为1D:
for (var i = 0; i < usernames.length; i++) {
Logger.log(usernames[i][0]);
}
for(var i=0;i
这使得记录器正确地记录了我想要的所有用户名,但我不知道如何将它们放入数组中
2个主要问题:
是的,您可以将数组展平并与
indexOf
进行比较:
var flattened_usernames = [] ;
for (var i = 0; i < usernames.length; i++) {
flattened_usernames.push(usernames[i][0]);
}
顺便说一句,我假设你知道如何直接从
onFormSubmit
事件中获取用户名,而不是从工作表的最后一行获取用户名。但如果不知道,你应该学会如何这样做!这很有意义,我会尝试将其放入循环中,谢谢!你能详细说明onFormSubmit
部分吗?我的计划是创建一个表单提交触发器(Edit>Current project's triggers
)来运行函数,是否有其他方法?如果向函数添加参数,则为isUserNew(e),然后onFormSubmit触发器将表单提交数据传递给您的函数。然后您可以像这样获取最新的用户名:var username=e.namedValues[“User name”][0]
。请参阅使用Array#map
:var users1d=usernames.map(函数(行){return row[0];})
Apps脚本中有一些较新的Array
方法可用-它们将在自动完成中显示。您可以查看它们在所选JavaScript语言引用(如MDN)上的工作方式。@tehhowch对于延迟响应表示抱歉,感谢您的提示!
if (usernames[i][0] === latest_username)