向后循环遍历数组时出错

Error while looping backwards through an array

本文关键字:出错 数组 遍历 循环      更新时间:2023-09-26

我开始做一些事情,很早就遇到了障碍,试图用我对javascript的有限知识尽早思考解决问题的方法。

我确定这是简单而烦人的事情,但我似乎看不到导致错误的原因。

只需处理脚本即可使用谷歌脚本均匀地显示来自谷歌电子表格的数据。但是,是的,似乎无法反向循环特定值。

请参阅下面的注释代码,并提前表示感谢。

简单尝试向前循环遍历数组。决定去基础,因为我被难住了。工程。记录器显示我上升了 1

function getInfo() {
var sheet = SpreadsheetApp.openById("ID HERE").getSheetByName("Sheet1");
var values = sheet.getDataRange().getValues();

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

与上述相同,除了我试图反向浏览数组。 有效,但到目前为止,我们只问它我们处于循环的哪个部分。

function getInfo() {
var sheet = SpreadsheetApp.openById("ID HERE").getSheetByName("Sheet1");
var values = sheet.getDataRange().getValues();

for(i=values.length;i > 0 ;i--){
Logger.log([i]);
}
}

按时系好裤子,因为我们要求数组提供数据,向前循环。它有效。它返回数组中每个条目的整行

function getInfo() {
var sheet = SpreadsheetApp.openById("ID HERE").getSheetByName("Sheet1");
var values = sheet.getDataRange().getValues();

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

让我们在月球上行走并再次尝试反向循环。因为我不好,我很坏,嘿嘿嘿,哎呀。它适用于:)

function getInfo() {
var sheet = SpreadsheetApp.openById("ID HERE").getSheetByName("Sheet1");
var values = sheet.getDataRange().getValues();

for(i=values.length;i > 0 ;i--){
Logger.log([i]+ " " + values[i]);
}
}

穿上我的大男孩裤子后,我正在我的数组中记录一个条目,

向前循环。万岁,裤子保持干净,结果如预期。

function getInfo() {
var sheet = SpreadsheetApp.openById("ID HERE").getSheetByName("Sheet1");
var values = sheet.getDataRange().getValues();

for(i=0;i < values.length;i++){
Logger.log([i]+" " + values[i][16]);
}
}

那么为什么哦,为什么不反过来工作并且总是引发错误"(类型错误: 无法从未定义读取属性"16"。(第 69 行,文件"代码")解雇"第69行在下面的代码中是(Logger.log([i]+ " " + values[i][16]);)。

function getInfo() {
var sheet = SpreadsheetApp.openById("ID HERE").getSheetByName("Sheet1");
var values = sheet.getDataRange().getValues();

for(i=values.length;i > 0 ;i--){
Logger.log([i]+ " " + values[i][16]);
}
}

想想你应该为"for"循环使用的索引。向后循环数组时,您希望从最后一个索引开始,并以第一个索引结束。

您可能知道,数组a的最后一个索引是 a.length - 1 ,而第一个索引是 0 。您希望将它们都包含在循环中,因此向后循环的代码是:

for (i = values.length - 1; i >= 0; i--) {
    Logger.log(i + " " + values[i][16]);
}
数组从

索引 0 开始,因此数组中的最后一个索引的长度为 -1,因此:

for(i=values.length;i > 0 ;i--){

应该是

for (i=values.length-1; i >= 0; i--){