【问题标题】:Google apps script / javascript 2D array typeerror谷歌应用脚​​本/javascript 2D 数组类型错误
【发布时间】:2013-03-12 06:03:33
【问题描述】:

我的目的是使用 Google Apps 脚本制作一个小测验脚本。问题和可能答案的数据位于 Google 电子表格中。电子表格中的范围由脚本调用并用作二维数组。大多数时候脚本运行良好,但有时会出现

'typeerror 无法读取未定义的属性'0''

似乎随机弹出。

我可能错误地使用了数组功能,但我无法理解它。

1 在大多数有关数组的示例中,都使用了 for 循环。由于我的数组中的数据不会改变,使用这个 for 循环仍然是强制性的吗?

2 将电子表格数据存储到缓存中是否有益?

function drawQuestion (){

  var app = UiApp.getActiveApplication();
  var cache = CacheService.getPrivateCache();

  //Add Spreadsheet DB
  var sheet  = SpreadsheetApp.openById(SPREADSHEET_ID);
  var data = sheet.getDataRange().getValues();

  var min =1;
  var max = MAX;
  var xnumber = (Math.floor(Math.random() * (max - min + 1)) + min);

  //for (var i = 0; i < data.length; i++) {
    var question1 = String(data[xnumber][0]);  //when I change this '0' in a '1' it gives me a typeerror cannot read property 1 - message.
    var answer1 = String(data[xnumber][1]);
    var answer2 = String(data[xnumber][2]);
    var answer3 = String(data[xnumber][3]);
    var answer4 = String(data[xnumber][4]);
    var correct1 = Number(data[xnumber][5]);
   // var background1 = data[xnumber][6];
   // var explanation1 = data[xnumber][7];
 // }  


  //Write the new Question
  var statusLabel = app.getElementById("statusLabel");
   statusLabel.setText(question1);
  //Answer1
  var button1 = app.getElementById("button1");
  button1.setText(answer1);

  //Answer2
  var button2 = app.getElementById("button2");
  button2.setText(answer2);
  //Answer3
  var button3 = app.getElementById("button3");
  button3.setText(answer3);
  //Answer4
  var button4 = app.getElementById("button4");
  button4.setText(answer4);

  //Store correct answer & explanation in cache
  cache.put('correct1', Number(correct1));
  //cache.put('explanation1', explanation1);

  } 

【问题讨论】:

    标签: javascript arrays google-apps-script


    【解决方案1】:

    它说您的data[xnumber] 在该实例期间未定义。您正在访问未定义对象的索引0。在使用data[xnumber][0] 之前验证data[xnumber]data[xnumber][0] 是否有效。

    另外,请在您的代码中验证您的 xnumber 值。

    通过使用此表达式,您的xnumber 可以具有任何值(不保证介于0max 之间)

    var xnumber = (Math.floor(Math.random() * (max - min + 1)) + min);
    

    在循环中使用数组也没有限制。但它会通过为循环提供适当的验证条件来防止这些类型的错误

    【讨论】:

    • 你是对的。我错过了数组以 [0] 开头的事实。因此 MAX 的定义数量高于电子表格中的可用行数;没有实施验证允许产生此错误。对我的第二个问题有任何反馈吗?缓存与电子表格链接?
    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多