6

I am trying to compare string values that I have obtained from my google spreadsheet.

My Months appear in this format " Jun13", "Aug13" etc. and my script has trouble comparing the values when they are in such formats

var data = ss.getRange(2,2,ss.getLastRow(),3).getValues();
var ListOfMonths = new Array();

for(var i = 0; i < data.length; ++i){

var row = data[i][0];
var duplicate = false;
  for(j in ListOfMonths){
      if(row.toString.match(ListOfMonths[j][0])){
        duplicate = true;
      }
      if(!duplicate){
        ListOfMonths.push(row);
      }
  }
}

Could someone help me with this issue of comparing strings? I also tried == and === but they all don't work

Babak Naffas
  • 12,395
  • 3
  • 34
  • 49
user3429475
  • 61
  • 1
  • 2
  • 4

4 Answers4

3

try that:

function test(){
  var ss = SpreadsheetApp.getActive().getSheetByName("month test");
  var data = ss.getRange(2,2,ss.getLastRow(),3).getValues();
  var ListOfMonths = new Array();  
  for(var i in data){
    var row = data[i][0].toString();
    if(ListOfMonths.indexOf(row)==-1){
      Logger.log(row+" is not referenced. Adding it");
      ListOfMonths.push(row);
    }
  }
  Logger.log(ListOfMonths);
}
Harold
  • 3,297
  • 1
  • 18
  • 26
1

Harold's code is more efficient than yours but it has a different logic... if you're interrested to know why your code didn't work here is a version that takes the same approach as yours but with a few bug corrections that make it work.

Shortly described, you pushed the value at a wrong place in the loop and you forgot to add a first item to have at least one element in your second array. You didn't use match the right way, match returns the 'common' part in the string, not a boolean.

Here is the code :

function myFunction() {
  var ss = SpreadsheetApp.getActiveSheet();
  var data = ss.getRange(2,2,ss.getLastRow(),3).getValues();
  var ListOfMonths = new Array();
  ListOfMonths.push(data[0])

  for(var i = 0; i < data.length; ++i){

    var row = data[i];
    var duplicate = false;

    for(j in ListOfMonths){
      var item = ListOfMonths[j][0];
      if(row.toString().match(item) == item){
        duplicate = true;
        break;
      }
    }
    if(!duplicate && i<data.length-1){
      ListOfMonths.push(row); 
    }
  }
  Logger.log(ListOfMonths);
}
Serge insas
  • 45,904
  • 7
  • 105
  • 131
1

Is there any reason you can't use the '==' operator?

if ( "April" == ListOfMonths[j][0] ) {
    Logger.log("Match!");
}
Will Charlton
  • 862
  • 10
  • 11
1

Just use '==' operator:

if(myString != ''){
//do something
}

Enjoy!

user2503882
  • 71
  • 1
  • 3