Adam Hill
Adam Hill

Reputation: 81

Comparing elements of an array in Google Apps Script

Basic Example data

I cannot figure out why the if statement I have marked as "If statement in question", never evaluates to true and its commands never execute.

  function setDuplicatesArray () {
  var sheet = SpreadsheetApp.getActive().getActiveSheet();

  var compareFromCol = "A";
  var compareToCol = "E";
  var compareFromIndex = sheet.getRange(compareFromCol+"1").getColumn();
  var compareToIndex = sheet.getRange(compareToCol+"1").getColumn();
  var maxRows = sheet.getMaxRows();


  var FromValues = sheet.getRange(4,compareFromIndex,maxRows,1).getValues();
  var ToValues   = sheet.getRange(4,compareToIndex,maxRows,1).getValues();

  var count = 0
  for (i=0; i <= maxRows; i++) {
    var from = FromValues[i];
    if (from == "") { break; }
       for ( j=0; j <= maxRows; j++) {
         var to = ToValues[j];

         if (to == "") {break; }

         Logger.log("\n"+from+"\n"+to+"\n\n");

         if (from === to) { //IF STATEMENT IN QUESTION
           count = count++;
           sheet.getRange(i+4,compareFromIndex,1,4).setBackgroundRGB(255,255,0);
           break;
         }
       }
  }

Here is the log to confirm that some elements are the same:

[17-07-08 12:27:57:899 PDT] 
Desk
Cats


[17-07-08 12:27:57:900 PDT] 
Desk
Dogs


[17-07-08 12:27:57:900 PDT] 
Desk
Pigs


[17-07-08 12:27:57:900 PDT] 
Desk
Fish


[17-07-08 12:27:57:900 PDT] 
Cats
Cats


[17-07-08 12:27:57:901 PDT] 
Cats
Dogs


[17-07-08 12:27:57:901 PDT] 
Cats
Pigs


[17-07-08 12:27:57:901 PDT] 
Cats
Fish


[17-07-08 12:27:57:902 PDT] 
Fish
Cats


[17-07-08 12:27:57:902 PDT] 
Fish
Dogs


[17-07-08 12:27:57:902 PDT] 
Fish
Pigs


[17-07-08 12:27:57:903 PDT] 
Fish
Fish


[17-07-08 12:27:57:903 PDT] 
Pencils
Cats


[17-07-08 12:27:57:903 PDT] 
Pencils
Dogs


[17-07-08 12:27:57:904 PDT] 
Pencils
Pigs


[17-07-08 12:27:57:904 PDT] 
Pencils
Fish


[17-07-08 12:27:57:904 PDT] 0.0

Upvotes: 1

Views: 595

Answers (1)

Adam Hill
Adam Hill

Reputation: 81

I figured it out.

.getValues() creates a two dimensional array despite there being only one column in its range.

So I changed:

var from = FromValues[i];

to

var from = FromValues[i][0];

and

var from = ToValues[j];

to

var from = ToValues[j][0];

Upvotes: 2

Related Questions