如何优化数组?

问题描述 投票:0回答:1

我开始学习使用JavaScript的Google应用脚本。我写了这段代码,但是它确实很慢,并且执行该函数花费的时间太长。我认为这不是执行此功能的最佳方法。是否有任何选择/方式(数组)来使其更快或以其他方式减少等待时间?我想做的就是在一个列单元格值设置为true时,在另一单元格列中插入“今天的日期”。

function onEdit() {
  sConfDate();
}

function sConfDate(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName("Data");
  var dataRange = dataSheet.getRange(9, 1, dataSheet.getLastRow(), 43);
  var data = dataRange.getValues();
  var d = new Date();
  var dd = d.getDate();
  var mm = d.getMonth() +1;
  var yyyy = d.getFullYear();
  var date = dd + "/" + mm + "/" + yyyy;
  var needSay = 'SUC';
  var needSay2 = '-';

  for(var i = 0; i < data.length; i++){
    //row items
    var values = data[i];
    //column items
  for(var j = 0; j < values.length; j++){
    var row = values[j];
    var checkRow = row;
    //Logger.log(checkRow);
       if(checkRow === needSay && checkRow === needSay2){
         dataSheet.getRange(9 + i, 43).setValue(date);
      };
    };
  };
}
javascript google-apps-script google-apps
1个回答
0
投票

也许这就是您的想法:

function sConfDate(){
  var ss=SpreadsheetApp.getActive();
  var dataSheet=ss.getSheetByName("Data");
  var dataRange=dataSheet.getRange(9, 1, dataSheet.getLastRow()-8, 43);
  var data=dataRange.getValues();
  var datacol43=dataSheet.getRange(9,43,dataSheet.getLastRow()-8,1).getValues();
  var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
  data.forEach(function(r,i){
    r.forEach(function(c,j){
      if(c=='SUC' || c=='-') {
        datacol43[i][0]=date;
      }
    });
  });
  dataSheet.getRange(9,43,dataSheet.getLastRow()-8,1).setValues(datacol43);                   
}
© www.soinside.com 2019 - 2024. All rights reserved.