如何从Rhino重写V8的这段代码?

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

我是日语,不是计算机程序员。我曾经在GAS上编写过脚本。因为我确实通过GAS管理Chat和Google电子表格的出勤率。聊天工具是聊天工作。适用于Gas(Rhino)。但这不适用于V8。我尝试将line19“ for each(json中的var obj){”重写为“ for(json中的var obj){”)。请告诉我什么不好...我应该重写哪个?

function recordTime(){

  /*Sheet setting*/
  var wsData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("data"); //DataSheetSetting
  var wsStaff = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("coworkers"); //CoworkersMasterSetting

  /*ChatworkURLrequest*/
  var params = {
    headers : {"X-ChatWorkToken" : 'anynumber'},
    method : "get"
  };
  var roomID = anynumber; //ROOMID
  var url = "https://api.chatwork.com/v2/rooms/" + roomID + "/messages?force=0"; //GetMessageFromGroupchat

  try{
    var respons = UrlFetchApp.fetch(url, params); //GetResponseFromChatworkAPIendpoint
    var json = JSON.parse(respons.getContentText()); //Returnjson

    for each(var obj in json){ //I understand that I should rewrite "for (var obj in json){

/*Get YMDhm and ID*/      
      var date = new Date(obj.send_time*1000); 
      var date_D = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0); 
      var date_T = new Date(date.getFullYear(),date.getMonth(),date.getDate(),date.getHours(),date.getMinutes(),0);  
      var date_TH = new Date(0,0,0,date.getHours(),date.getMinutes(),0);  

/*dateToSn Setting*/      
var MILLIS_DIFFERENCE = 9 * 60 * 60 * 1000; 
var COEFFICIENT = 24 * 60 * 60 * 1000; 
var DATES_OFFSET = 70 * 365 + 17 + 1 + 1; 

function dateToSn(date){ //Date→Serial
  return convertUt2Sn(date.getTime());
}
function convertUt2Sn(unixTimeMillis){ //UNIX→Serial
  return (unixTimeMillis + MILLIS_DIFFERENCE) / COEFFICIENT + DATES_OFFSET;
}

/*findRow*/      
function findRow(sheet,val,col){
var dat = sheet.getDataRange().getValues(); 
for(var i=1;i<dat.length;i++){
  if(dat[i][col-1] === val){
    return i+1;
  }
}
return 0;
}

/*StaffID*/
var staffID = wsStaff.getRange(findRow(wsStaff,obj.account.account_id,1),2).getValue(); 
var dataRow=findRow(wsData,dateToSn(date_D)+staffID.toString(),1); 

/*If「出勤」*/      
if(obj.body.match(/出勤/)){ 
  if(!dataRow){
    wsData.appendRow(
      ["=INDIRECT(\"RC[1]\",FALSE) & INDIRECT(\"RC[2]\",FALSE)",date_D,
       "=VLOOKUP(" + obj.account.account_id + ",'coworkers'!A:B,2,FALSE)","=VLOOKUP(" + obj.account.account_id + ",'coworkers'!A:E,4,FALSE)","出勤",date_T
      ]);    
      }


/*If「外出」or「直行」*/    
}else if(obj.body.match(/外出/) || obj.body.match(/直行/)){
  if(dataRow){
    var rng = wsData.getRange(dataRow,8);
    if(!rng.getValue()){
      rng.setValue(date_T);
    }
  }
}

/*If「帰社」or「直帰」*/    
else if(obj.body.match(/帰社/) || obj.body.match(/直帰/)){
  if(dataRow){
    var rng = wsData.getRange(dataRow,9);
    if(!rng.getValue()){
      rng.setValue(date_T);
    }
  }
}

/*If「中抜け」*/    
else if (obj.body.match(/中抜け/)){
  if(dataRow){
    var rng = wsData.getRange(dataRow,10);
    if(!rng.getValue()){
      rng.setValue(date_T);
    }
  }
}

/*If「戻り」*/    
else if (obj.body.match(/戻り/)){
  if(dataRow){
    var rng = wsData.getRange(dataRow,11);
    if(!rng.getValue()){
      rng.setValue(date_T);
    }
  }
}     

/*If「退勤」*/    
else if(obj.body.match(/退勤/)){
  if(dataRow){
    var rng = wsData.getRange(dataRow,7);
    if(!rng.getValue()){
      rng.setValue(date_T);
    }
  }
}
}      

  }catch(e){
    Logger.log('Error');
    Logger.log(e.message);
  }
}

google-sheets v8 rhino gas time-and-attendance
1个回答
0
投票

在此处查看正式文献:https://developers.google.com/apps-script/guides/v8-runtime/migration#avoid_for_eachvariable_in_object

简而言之:

for each (var obj in json) {
  do_something_with(obj);
}

成为

for (var obj of json) {
  do_something_with(obj);
}

请注意,in更改为of,这使for循环遍历值而不是键。因此,您还可以使用传统的for-in循环,并手动使用键来获取值:

for (var obj_key in json) {
  var obj = json[obj_key];
  do_something_with(obj);
}

您也可以使用let而不是var来获取块作用域变量,这些变量通常更直观地使用,但这是无关的更改,如果您只是想让事情正常工作就不需要。

© www.soinside.com 2019 - 2024. All rights reserved.