2017-09-13 3 views
1

Ich habe eine Funktion, die ein Wörterbuch basierend auf einer Reihe von Werten aus einem Blatt erstellt. Ich versuche dann, einen der Werte aus diesem Blatt mit einem Schlüssel zu ziehen. Es funktioniert gut, um sich an der Konsole anzumelden. In einer if-Anweisung heißt es jedoch Syntaxfehler und sonst nichts. Ich kann es nicht herausfinden. Hier ist die Funktion und der Code, der abstürzt. Dieses Problem tritt nur in der for-Schleife auf und tritt nicht außerhalb von es auf.Wörterbuch Syntaxfehler in Google Apps Script

//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

Es scheint, dass '' cells'' nicht für die Zeile '' if (cells [i] [phone] === phoneNumber) {'' definiert ist. '' cells'', die in '' columnLocationWithNotation() '' definiert sind, können nicht außerhalb der Funktion verwendet werden. Wenn '' cells'' im selben Umfang mit '' if (cells [i] [phone] === phoneNumber) {'' definiert ist, können wir Sie über die Fehlermeldungen und das ganze Skript ohne Ihre privaten Informationen informieren? – Tanaike

Antwort

1

Es ist nicht die hervorgehobene Zeile, die das Problem verursacht, obwohl es viele andere Probleme mit Ihrem Skript gibt. Es gibt keinen '= <' Operator in JavaScript. Verwenden '< =' statt:

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

Auch als Tanaike wies darauf hin, Ihre 'Zellen' Variable nur im Rahmen Ihrer 'columnLocationWithNotation (Notation)' Funktion definiert ist und wird nicht aus dem globalen Kontext zugänglich sein. Global definierte Variablen sind von den Funktionen aus sichtbar, die Sie innerhalb des globalen Objekts deklarieren, aber nicht umgekehrt. Gleiches gilt für die Variable 'sheet'. Die Variable 'phoneNumber' scheint nicht definiert zu sein, zumindest nicht in dem Codeschnipsel, den Sie zur Verfügung gestellt haben.

Beachten Sie, dass das Setzen von '' nach 'return' Anweisungen überflüssig ist.

return dictionary; 
     break; 

Sie können nur zurückkehren aus ‚Schalter‘ Anweisung ohne Pausen, oder die Pausen verlassen und setzen eine einzige ‚Rückkehr‘ Anweisung nach ‚Schalter‘.

Schließlich immer ein Semikolon am Ende der Zeile. Dies wird Ihnen helfen, viele mögliche Fallstricke und Probleme mit JS-Parser zu vermeiden. Ich bemerkte mehrere Fälle, in denen Sie das Semikolon weggelassen:

return dictionary 
     break;  

    var phone = master0indexDictionary["Tutor Name"] 

Zum Beispiel kann der folgende Code brechen, wenn Sie nicht zur Gewohnheit haben das Semikolon in seinem Platz setzen

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

Die JS Parser behandelt diesen Code als eine Zeile, so 'a' wird immer noch 'undefined' von der Zeit, die Sie die 'forEach()' Schleife auf dem Array aufrufen.