2016-12-12 1 views
0

Ich habe Probleme bei der Erfüllung einer If-Bedingung und ich habe keine Ideen mehr. Ich habe den Logger verwendet, um zu prüfen, ob die beiden Variablen identisch sind, und sie erscheinen identisch im Logger und der Code läuft gut. Hier ist mein Code:Zwei Objekte (Daten) sind im Logger identisch, erfüllen aber nicht die Bedingung "Wenn". Javascript/Google Scripts

//Get two ranges from Google sheets and turn into values, (inputValues and datesValues) 
... 
for (var i = 0; i < inputValues.length; i++) { 
    if ((inputValues[i][2].length > 0) && (inputValues[i][29].length > 0)) { 
    //This creates an event in Google Calendar. Works fine. 
    var eventNum = i; 
    Logger.log(datesValues[3][4]); // this is to test - results below 
    Logger.log(inputValues[eventNum][30]); 
     for (var k = 0; k < datesValues.length; k++) { 
     if (datesValues[k][4] == inputValues[eventNum][30]){ 
      Logger.log("yes"); 
      //Things in this loop that I want to do but can't. 
      } 
      } 
     } 
    } 

Hier ist, was die Logger kehrt:

[16-12-12 09: 11: 50: 951 PST] Do 15. Dezember 20.00.00 GMT + 01: 00 2016

[16-12-12 09: 11: 50: 952 PST] Do 15. Dezember 20.00.00 GMT + 01: 00 2016

ich bin im Grunde nicht in der Lage, die zweiten "zu stolpern if "Klausel, obwohl es eine" i ", so dass datesValues[3][4] == inputValues[eventNum][30]. Diese Protokolle sehen für mich identisch aus! Die for-Schleife vor der if-Schleife funktioniert auch korrekt, datesValues.length = 50.

Gibt es in Javascript etwas Ungewöhnliches über Daten und logische Operatoren, von denen ich nichts weiß?

Danke!

+2

Verwendung eine weitere Variable in der zweiten 'for' Schleife statt' I' – azad

+0

Sie melden 'datesValues ​​[3] [4]', aber Test gegen 'datesValues ​​[i] [4]'. Sind Sie sicher, dass die erste 'if'-Anweisung wahr ist, wenn' i = 3'? – canton7

+2

@ JordanBurnett ist wahrscheinlich ein Tag, der von der Logger-Bibliothek hinzugefügt wurde. –

Antwort

0

Haben Sie versucht, die Zeichenfolgen statt, was auch immer Objekt diese Variablen darstellen Vergleich:

if (datesValues[k][4].toString() == inputValues[eventNum][30].toString()){ 
... 
} 

Wenn Sie Datum Objekte vergleichen, sie sind nicht das gleiche Objekt, selbst wenn sie den gleichen Tag darstellen. Zum Beispiel wird diese false zurück:

console.log(new Date(2017, 1, 1) == new Date(2017, 1, 1)); // returns false 

Wenn Daten zu vergleichen, können Sie die String-Darstellung, wie oben oder den Wert zurück von getTime() vergleichen, das mein bevorzugten Ansatz wäre.

console.log(new Date(2017, 1, 1).getTime() == new Date(2017, 1, 1).getTime()); //returns true 
+0

Es hat funktioniert! Vielen Dank. Ich denke, da war etwas Seltsames an den Datumsobjekten, und wenn man sie in Strings änderte, gab die If-Klausel sofort 'true' zurück. Vielen Dank! –

+0

Vergessen Sie nicht, dies als die Antwort zu markieren – mcgraphix

Verwandte Themen