javascript - 匹配数组的返回索引不起作用 - Javascript Google Apps 脚本
问题描述
我有一个电子表格,第 1 行在每个单元格中都有日期
只要该列与今天的日期匹配,我就想返回列号。第一个标题从单元格 B1 开始。
我正在使用以下内容,我可以让它工作,但是当我做'return i'时,它总是返回'0'。
function getColumnIndex() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var lastColumn = sheet.getLastColumn();
var data = sheet.getRange(1,2,1,lastColumn).getValues(); //create an array of data from row 1
for (var i = 0; i <= data.length; i++) {
var dateToday = Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy")
if (data[i] == dateToday) {break};
{
return i;
}
}
}
现在,如果我将最后一行“return i”切换为“return dateToday”,该函数将起作用,它将返回正确的日期,因此我知道它匹配正确(如果我将行单元格更改为其他值,它将返回这些值,如果它火柴)。当我输入“return i”时,我只是无法让它吐出索引号。
解决方案
问题/解释:
var data = sheet.getRange(1,2,1,lastColumn).getValues();
返回一个二维数组。
结果,data[i]
返回一个实际引用该行的一维数组。要解决此问题,请将数组展平以将其转换为一维:
var data = sheet.getRange(1,2,1,lastColumn).getDisplayValues().flat();
- 您的
if
条件在第一次迭代时执行,i=0
因为您在其后放置了一个分号;
。此外,不需要,因为在语句break
之后不会执行任何操作:return
替换:
if (data[i] == dateToday) {break};
{
return i;
}
和
if (data[i] == dateToday)
{
return i;
}
- 当您使用日期比较时,您需要使用
getDisplayValues()
以确保您正在比较显示的值而不是日期的值。
解决方案:
function getColumnIndex() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var lastColumn = sheet.getLastColumn();
var data = sheet.getRange(1,2,1,lastColumn).getDisplayValues().flat(); //create an array of data from row 1
for (var i = 0; i <= data.length; i++) {
var dateToday = Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy")
if (data[i] == dateToday)
{
return i;
// return i+2; // if you want to get the column number instead.
}
}
}
记住,i
指的是数组的位置。在 JavaScript 中,数组中的索引从0
. 此外,您的数据从第二列开始。如果您希望脚本返回列数,请更改return i
为return i+2
.
推荐阅读
- javascript - 列包装jsPDF自动表不起作用?
- flutter - 在创建带有浮动应用栏的应用时使用 StreamBuilder
- c++ - 内存分配代码块
- mqtt - 如何将数据添加到 msg.payload 以通过 MQTT 发送?
- php - 登录表单数据库检查错误
- c++ - Visual Studio 2017,智能感知不工作
- json - 尝试在 PHP 中将 JSON 文件插入 SQL 时出现“未定义的索引”
- docker - 将应用程序的公共 URL 放在其 Docker Compose 环境中
- plsql - 使用 base64 值 PL/SQL 更新 blob 列
- c# - 基于推和拉的结构(如 IEnumerable)有什么区别
和 IObservable