Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compare strings in google apps script

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

like image 819
user3429475 Avatar asked Mar 17 '14 15:03

user3429475


4 Answers

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);
}
like image 103
Harold Avatar answered Oct 08 '22 16:10

Harold


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);
}
like image 29
Serge insas Avatar answered Oct 08 '22 17:10

Serge insas


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

if ( "April" == ListOfMonths[j][0] ) {
    Logger.log("Match!");
}
like image 30
Will Charlton Avatar answered Oct 08 '22 16:10

Will Charlton


Just use '==' operator:

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

Enjoy!

like image 34
user2503882 Avatar answered Oct 08 '22 18:10

user2503882