Google Apps脚本中的字典语法错误

时间:2017-09-13 23:19:28

标签: dictionary google-apps-script syntax

我有一个函数可以根据工作表中的一系列值创建字典。然后我尝试使用键从该表中拉出一个值。它可以正常登录到控制台。但是,在if语句中,它表示语法错误,没有别的。我想不明白。这是崩溃的功能和代码。此问题仅发生在for循环中,并且不会发生在它之外。

//creates dictionary
function columnLocationWithNotation(notation) {
  var spreadsheet = SpreadsheetApp.openByUrl();
  var sheet = spreadsheet.getActiveSheet();
  var data = sheet.getDataRange();
  var cells = data.getValues();
  var dictionary = {};

  switch (notation) {
    case "zeroIndex":
      for (var i = 0; i < sheet.getLastRow(); i++) {
        dictionary[cells[i][0]] = cells[i][1]  
      } 
      return dictionary
      break;
    case "regularIndex": 
      for (var i = 0; i < sheet.getLastRow(); i++) {
        dictionary[cells[i][0]] = cells[i][2]
      }
      return dictionary
      break;
    case "string": 
      for (var i = 0; i < sheet.getLastRow(); i++) {
        dictionary[cells[i][0]] = cells[i][3]
      }
      return dictionary
      break;             
  }
}

var master0indexDictionary = columnLocationWithNotation("zeroIndex")

for (var i = 1; i =< (sheet.getLastRow() - 1); i++) {
  var phone = master0indexDictionary["Tutor Name"]
  if (cells[i][phone] === phoneNumber) { //LINE WITH SYNTAX ERROR
    //do something

}

1 个答案:

答案 0 :(得分:1)

即使您的脚本存在许多其他问题,也不是导致问题的突出显示的行。 JavaScript中没有&#39; =&lt;&#39; 运算符。请改用&#39;&lt; =&#39;

for (var i = 1; i <= (sheet.getLastRow() - 1); i++) {

此外,正如Tanaike所指出的,您的&#39; 变量仅在&#39; columnLocationWithNotation(表示法)&#39;的上下文中定义。 功能,无法从全局上下文访问。从全局对象中声明的函数可以看到全局定义的变量,反之亦然。同样适用于&#39;表格变量。 &#39; phoneNumber&#39; 变量似乎无法定义,至少不会在您提供的代码段中定义。

请注意,在&#39;返回&#39; 语句后添加中断&#39; 是多余的。

 return dictionary;
      break;

您可以退出&#39;切换&#39; 语句而不使用中断,或者保留中断并放置一个&#39; return&#39; &#39;切换&#39;

之后发表声明

最后,总是在行尾添加分号。这样做可以帮助您避免JS解析器的许多潜在缺陷和问题。我注意到你省略了分号的几个例子:

 return dictionary
      break;    

  var phone = master0indexDictionary["Tutor Name"]

例如,如果您没有将分号放在合法位置的习惯,以下代码将会中断

var a = {name: 'John'}  //no semicolon
[a].forEach(function(element) {
  Logger.log(element);    //logs undefined
  })

JS解析器将此代码视为一行,因此&#39; <&#39; 仍然是&#39;未定义&#39; 你在数组上调用&#39; forEach()&#39; 循环。