gpt4 book ai didi

arrays - 将列范围放入一维数组的最有效方法

转载 作者:行者123 更新时间:2023-12-03 09:00:21 25 4
gpt4 key购买 nike

我有一个 Google 表单,用于收集链接电子表格中的回复。表单中的字段之一是用户名(工作表中的 B 列)。我正在编写一个脚本,以便在新用户(唯一的用户名)提交时通知我。为此,我:

  1. 获取 B 列中除最新值之外的所有值
  2. 获取最新的用户名
  3. 检查最新的用户名是否在值列表中(如果不在,则执行某些操作)。

这是我到目前为止所得到的:

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();
}

这给了我一个二维数组用户名,看起来像[[UserA],[UserB],[UserC],[UserC],[UserA],[UserX]]。 然后我尝试了 if (usernames.indexOf(latest_username) == -1 但这不起作用 - 它只适用于一维数组。我想使用 a 将数组转换为一维循环:

  for (var i = 0; i < usernames.length; i++) {
Logger.log(usernames[i][0]);
}

这使得记录器正确记录我想要的所有用户名,但我不知道如何将它们放入数组中。

2个主要问题:

  1. 如何将值放入数组而不是记录器中?
  2. 这是完成我想做的事情的最佳方式吗?每次提交时,我都会抓取一个 2D 数组,转换为 1D 并进行比较,这似乎没有必要。列数据不会改变,每次只会增长1。当数据增长到 1000 时,这将如何影响运行时间?

最佳答案

是的,您可以展平数组并与 indexOf 进行比较:

var flattened_usernames = [] ;
for (var i = 0; i < usernames.length; i++) {
flattened_usernames.push(usernames[i][0]);
}

但是你最好只在循环内进行检查:

if (usernames[i][0] === latest_username)

顺便说一句,我假设您知道如何直接从 onFormSubmit 事件中获取用户名,而不是从工作表的最后一行获取用户名。但如果没有,你应该学习如何做到这一点!

关于arrays - 将列范围放入一维数组的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51080569/

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