首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义数组

如何定义数组
EN

Stack Overflow用户
提问于 2019-07-16 22:19:08
回答 1查看 100关注 0票数 0

当我尝试将一个值保存到一个多维数组中时,我得到了错误"cannot set property xx of undefined to xx“。几周前我让这段代码工作了,但现在它不工作了。我不确定是什么改变了,但我相信这个错误与数组的定义方式有关。

代码语言:javascript
复制
function iterateSheets() 
{
  var ss=SpreadsheetApp.getActive();
  var folder=DriveApp.getFolderById('1ezdV7AHBNyq6aZdqKdvhlOhKMmLPhQoW');//replace id with actual id of folder
  var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  var consol_sheet = SpreadsheetApp.openById('1FyuizUjU8W8idMonEp0qFthvTDjfwmnboZivAAozDXU').getActiveSheet();
  consol_sheet.clear()
  var x=0;
  var z=0;
  var final_values = [[]];

while(files.hasNext())
 {
    var file=files.next();
    var ts=SpreadsheetApp.openById(file.getId());
    var allShts=ts.getSheets();


       for(var i=0;i<1;i++)   
       {  
        // if (allShts[i] == "Aug"  || allShts[i] = "Sept")
         //{   
            var consol_values = allShts[i].getRange(8,1,allShts[i].getLastRow(),10).getValues(); 
            var headers = allShts[i].getRange(4,6,1,4).getValues();  
            var position= allShts[i].getRange("B1").getValue();
            var period = allShts[i].getRange("B2").getValue();
            var email = allShts[i].getRange("B3").getValue();    

             for (var z = 0;z<3;z++)//
             {   

               for (var y= 0;y<allShts[i].getLastRow();y++)               
               {          
                 if (consol_values[y][0] != "" && consol_values[y][z+5] !="")     


                 final_values[x] = [];       

                 final_values[x][0]  = consol_values[y][0]  //AI pack 
                 final_values[x][1]  = '1111'
                 final_values[x][2]  = consol_values[y][2]  ; //measure
                 final_values[x][3]  = email ;
                 final_values[x][4]  = position ;     
                 final_values[x][5]  = headers[0][z];//location
                 final_values[x][6]  = 1;
                 final_values[x][7]  = period;
                 final_values[x][8]  = consol_values[y][3]; //price
                 final_values[x][9]  = consol_values[y][z+5]; //fcst

                 if (consol_values[y][z+5] != "")
                 { 
                    final_values[x][10] =(consol_values[y][25]); //fcst value             
                 }                          

                 x = Number(x)+1  //row count for consolidation output

                }
              //}   

         }    
      }

 }


//consol_sheet.getRange(2,1,final_values.length,final_values[0].length).setValues(final_values);

}

任何帮助我做错事的人都会非常感激。

EN

回答 1

Stack Overflow用户

发布于 2019-07-16 23:38:55

编辑: TheMaster已经指出你已经在用final_values[x] = [];初始化你的数组了,在审阅了我的答案之后,我同意他们是正确的。

问题实际上是你的条件语句:

代码语言:javascript
复制
if (consol_values[y][0] != "" && consol_values[y][z+5] !="")

应用程序脚本将继续读取一行,直到它看到;为止,因此,由于您没有将if块包含在花括号{}中,因此当读取final_values[x] = [];时,它将整个if块读取为:

代码语言:javascript
复制
if (consol_values[y][0] != "" && consol_values[y][z+5] !="") final_values[x] = []; 

这意味着如果consol_values[y][0] != "" && consol_values[y][z+5] !=""的计算结果为False,内部数组将永远不会初始化,并且在赋值时会得到cannot set property错误

代码语言:javascript
复制
final_values[x][0]  = consol_values[y][0];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57059443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档