繁体   English   中英

TypeError:无法读取未定义的谷歌表格应用程序脚本的属性

[英]TypeError: Cannot read property of undefined google sheets app scripts

我有代码,我试图从前一张表中索引和提取数据。 这段代码曾经可以工作,但现在我在运行代码时遇到了typeError

function updateLocations(market) {   
   

  var activeSheet = SpreadsheetApp.getActiveSpreadsheet();
  var lastPeriod = activeSheet.getSheetByName("Update Info").getRange("C7").getValue();
  var sourceSheet = SpreadsheetApp.openByUrl(lastPeriod).getSheetByName("Assembly Redwood");
  var targetSheet = activeSheet.getSheetByName("Assembly Redwood");


  var targetArr = targetSheet.getRange(4,1,targetSheet.getLastRow(),10).getValues();
  var sourceArr = sourceSheet.getRange(4,1,sourceSheet.getLastRow(),10).getValues();

  var POlistTarget = targetArr.map(function(r){return [r[0],r[1]]});
  var POlistSource = sourceArr.map(function(r){return [r[0],r[1]]});

  var skuList = POlistTarget.map(function(r){return [r[1]]});



  var arrSource = [];
  for(var i = 0; i < POlistSource.length; i++){
    var POSKU = POlistSource[i][0]+POlistSource[i][1];
    arrSource.push(POSKU);
  }

  var arrTarget = [];
  for(var i = 0; i < POlistTarget.length; i++){
    var POSKU = POlistTarget[i][0]+POlistTarget[i][1];
    arrTarget.push(POSKU);
  }



  var units = [];
  for(var i = 0; i < arrTarget.length; i++){
    var row = arrSource.indexOf(arrTarget[i]);
    var unit = sourceArr[row][8]; //***************type error flags this line
    units.push([unit]);
  }
Logger.log(units);


}

所有变量似乎都正确记录,但我仍然收到以下错误:

TypeError:无法读取未定义的属性“8”(第 333 行,文件“代码”)

问题:

Array.prototype.indexOf()返回可以在数组中找到给定元素的第一个索引,如果不存在,则返回 -1。

根据您收到的错误,我假设这将返回-1

var row = arrSource.indexOf(arrTarget[i]) // value of row is -1

因此sourceArr[-1] undefined 这就是你不能使用的原因:

var unit = sourceArr[row][8]

因为您要的是undefined sourceArr[-1]的第 8 个元素。

解决方案:

首先检查是否从indexOf方法中获得了非负值:

  var units = [];
  for(var i = 0; i < arrTarget.length; i++){
    var row = arrSource.indexOf(arrTarget[i]);
    console.log(row) // console row to see its value
    if (row>-1){
      var unit = sourceArr[row][8]; 
      units.push([unit]);
    }
  }

或者if (row!=-1)也可以。

最小可重现示例:

 const sourceArr = [[3,1,4,30,32,12,1,4,5,3], [3,1,4,30,32,12,1,4,5,3], [3,1,4,30,32,12,1,4,5,3], [3,1,4,30,32,12,1,4,5,3]] console.log(sourceArr[0][8]); // this works console.log(sourceArr[-1][8]); // TypeError: Cannot read property '8' of undefined

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM