0

So, I have a function that is used to iterate over rows within a spreadsheet. Based on checking some values, I need to return a value, if not, shouldn't return. I don't know how to return only in the specific cases when the function(row) has a return value.

function GetOldAreaSize(ID, area_changed, change_doc, area_kha, sheetSource) {
  
  var data = sheetSource.getDataRange().getValues();
  data.forEach(function (row) {
    if (row[0] == ID) {
      var area_changed_old = row[4];
      var change_doc_old = row[2]+row[3];
      var area_kha_old = row[15];

      if (area_changed == area_changed_old) {
        if (change_doc == "MR1") {
          if (change_doc_old == "PDD1") {
            var old_area = parseFloat(area_kha_old);
            Logger.log(old_area+" - "+parseFloat(area_kha))
            return parseFloat(area_kha_old);
          }} else if (change_doc == "MR2") {
            if (change_doc_old == "MR1") {
              Logger.log(area_kha_old+" - "+parseFloat(area_kha))
              return parseFloat(area_kha_old);
          }} else if (change_doc == "MR3") {
            if (change_doc_old == "MR2") {
              Logger.log(area_kha_old+" - "+parseFloat(area_kha))
              return parseFloat(area_kha_old);
          }} else if (change_doc == "MR4") {
            if (change_doc_old == "MR3") {
              Logger.log(area_kha_old+" - "+parseFloat(area_kha))
              return parseFloat(area_kha_old);
          }} else if (change_doc == "MR5") {
            if (change_doc_old == "MR4") {
              return parseFloat(area_kha_old);
          }} else if (change_doc == "MR6") {
            if (change_doc_old == "MR5") {
              return parseFloat(area_kha_old);
          }}
          else {
            ;
          }
      }
  } else{
    ;
  }});
}
  • 2
    The `return` statements inside your `.forEach()` callback will never have any effect on anything, because `.forEach()` pays no attention to returned values. – Pointy Nov 12 '21 at 13:50
  • 1
    You can't return from an outer function inside an inner function. It seems you need to use `filter` or `reduce` instead of `forEach`. – Teemu Nov 12 '21 at 13:51

1 Answers1

0

In JavaScript when nesting functions, you can't return from an inner function for the outer function.

I recommend using a for loop instead of .forEach():

let data = sheetSource.getDataRange().getValues();
for(let row of data) {
   /* Your code */
}
WolverinDEV
  • 1,494
  • 9
  • 19