For loop 您可以使用For循环来优化此代码吗?

For loop 您可以使用For循环来优化此代码吗?,for-loop,if-statement,google-apps-script,For Loop,If Statement,Google Apps Script,我希望有一个更干净的方法来编写这段代码。下面的内容完全按照预期工作,但是,我必须对多个不同的部分执行此操作,因此在执行此操作之前,我希望了解是否有可能使用for循环或其他方法来缩短此代码并帮助其运行得更快 用户可以输入数量从1到4不等的图像。根据他们选择的编号,将为要放置的每个图像创建一条新线。因此,这会将电子表格底部的行数降低许多行,因此需要考虑这一点,以确保无论用户选择多少图像,信息仍然插入到正确的位置。这是用谷歌表单中的谷歌应用脚本编写的。如果下面变量的值大于2,则表示用户需要图像,小于3

我希望有一个更干净的方法来编写这段代码。下面的内容完全按照预期工作,但是,我必须对多个不同的部分执行此操作,因此在执行此操作之前,我希望了解是否有可能使用for循环或其他方法来缩短此代码并帮助其运行得更快

用户可以输入数量从1到4不等的图像。根据他们选择的编号,将为要放置的每个图像创建一条新线。因此,这会将电子表格底部的行数降低许多行,因此需要考虑这一点,以确保无论用户选择多少图像,信息仍然插入到正确的位置。这是用谷歌表单中的谷歌应用脚本编写的。如果下面变量的值大于2,则表示用户需要图像,小于3表示不需要图像,并且不会创建新行

  var graphic1_loc = 'A62';
  var graphic2_loc = 'A63';
  var graphic3_loc = 'A64';
  var graphic4_loc = 'A65';
  var graphic5_loc = 'A66';

  var graphic1 = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic1_loc).getValue();
  var graphic2 = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic2_loc).getValue();
  var graphic3 = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic3_loc).getValue();
  var graphic4 = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic4_loc).getValue();
  var graphic5 = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic5_loc).getValue();

  var website_loc = 'D2';      
  var website_placement = 'B47';
  var website_placement2 = 'B48';
  var website_placement3 = 'B49';
  var website_placement4 = 'B50';
      var website_placement5 = 'B51';

      if (graphic2.length < 3 && graphic3.length < 3 && graphic4.length < 3 && graphic5.length < 3) {
        var website = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc).getValue()
        SpreadsheetApp.getActiveSheet().getRange('Briefing!'+website_placement).setValue('For the latest forecast updates, visit ' + website+'.');
      }
      else if (((graphic2.length > 2) && (graphic3.length < 3) && (graphic4.length < 3) && (graphic5.length < 3)) ||
               +((graphic2.length < 3) && (graphic3.length > 2) && (graphic4.length < 3) && (graphic5.length < 3)) ||
               +((graphic2.length < 3) && (graphic3.length < 3) && (graphic4.length > 2) && (graphic5.length < 3)) ||
               +((graphic2.length < 3) && (graphic3.length < 3) && (graphic4.length < 3) && (graphic5.length > 2))) {
        var website = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc).getValue()
        SpreadsheetApp.getActiveSheet().getRange('Briefing!'+website_placement2).setValue('For the latest forecast updates, visit ' + website+'.');
      }
      else if ((graphic2.length > 2 && graphic3.length > 2 && graphic4.length < 3 && graphic5.length < 3) ||
               +(graphic2.length > 2 && graphic3.length < 3 && graphic4.length > 2 && graphic5.length < 3) ||
               +(graphic2.length > 2 && graphic3.length < 3 && graphic4.length < 3 && graphic5.length > 2) ||
               +(graphic2.length < 3 && graphic3.length > 2 && graphic4.length > 2 && graphic5.length < 3) ||
               +(graphic2.length < 3 && graphic3.length > 2 && graphic4.length < 3 && graphic5.length > 2) ||
               +(graphic2.length < 3 && graphic3.length < 3 && graphic4.length > 2 && graphic5.length > 2)) {
        var website = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc).getValue()
        SpreadsheetApp.getActiveSheet().getRange('Briefing!'+website_placement3).setValue('For the latest forecast updates, visit ' + website+'.');
      }
      else if (((graphic2.length > 2) && (graphic3.length > 2) && (graphic4.length > 2) && (graphic5.length < 3)) || 
               +((graphic2.length > 2) && (graphic3.length > 2) && (graphic4.length < 3) && (graphic5.length > 2)) ||
               +((graphic2.length > 2) && (graphic3.length < 3) && (graphic4.length > 2) && (graphic5.length > 2)) ||
               +((graphic2.length < 3) && (graphic3.length > 2) && (graphic4.length > 2) && (graphic5.length > 2))) {
        var website = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc).getValue()
        SpreadsheetApp.getActiveSheet().getRange('Briefing!'+website_placement4).setValue('For the latest forecast updates, visit ' + website+'.');
      }
      else if ((graphic2.length > 2) && (graphic3.length > 2) && (graphic4.length > 2) && (graphic5.length > 2)) {
        var website = SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc).getValue()
        SpreadsheetApp.getActiveSheet().getRange('Briefing!'+website_placement5).setValue('For the latest forecast updates, visit ' + website+'.');
      }
var graphic1_loc='A62';
var graphic2_loc='A63';
var graphic3_loc='A64';
var graphic4_loc='A65';
var graphic5_loc='A66';
var graphic1=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic1_loc.getValue();
var graphic2=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic2_loc).getValue();
var graphic3=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic3_loc).getValue();
var graphic4=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic4_loc).getValue();
var graphic5=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+graphic5_loc).getValue();
var网站_loc='D2';
var网站位置='B47';
var网站_placement2='B48';
var网站_placement3='B49';
var网站_placement4='B50';
var网站_placement5='B51';
如果(图形2.length<3&&graphic3.length<3&&graphic4.length<3&&graphic5.length<3){
var website=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc.getValue())
SpreadsheetApp.getActiveSheet().getRange('Briefing!'+网站位置).setValue('有关最新预测更新,请访问'+website+');
}
否则如果((图2.length>2)和(图3.length<3)和(图4.length<3)和(图5.length<3))||
+((图2.length<3)和&(图3.length>2)和&(图4.length<3)和&(图5.length<3))||
+((图2.length<3)和&(图3.length<3)和&(图4.length>2)和&(图5.length<3))||
+((图2.length<3)和&(图3.length<3)和&(图4.length<3)和&(图5.length>2))){
var website=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc.getValue())
SpreadsheetApp.getActiveSheet().getRange('Briefing!'+website_placement2).setValue('有关最新的预测更新,请访问'+website+');
}
else if((graphic2.length>2&&graphic3.length>2&&graphic4.length<3&&graphic5.length<3)||
+(graphic2.length>2&&graphic3.length<3&&graphic4.length>2&&graphic5.length<3)||
+(graphic2.length>2&&graphic3.length<3&&graphic4.length<3&&graphic5.length>2)||
+(图形2.length<3&&graphic3.length>2&&graphic4.length>2&&graphic5.length<3)||
+(图形2.length<3&&graphic3.length>2&&graphic4.length<3&&graphic5.length>2)||
+(graphic2.length<3&&graphic3.length<3&&graphic4.length>2&&graphic5.length>2)){
var website=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc.getValue())
SpreadsheetApp.getActiveSheet().getRange('Briefing!'+website_placement3.).setValue('有关最新的预测更新,请访问'+website+');
}
如果((图2.length>2)和(图3.length>2)和(图4.length>2)和(图5.length<3))|
+((graphic2.length>2)和&(graphic3.length>2)和&(graphic4.length<3)和&(graphic5.length>2))||
+((graphic2.length>2)和&(graphic3.length<3)和&(graphic4.length>2)和&(graphic5.length>2))||
+((graphic2.length<3)和&(graphic3.length>2)和&(graphic4.length>2)和&(graphic5.length>2))){
var website=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc.getValue())
SpreadsheetApp.getActiveSheet().getRange('Briefing!'+website_placement4.).setValue('有关最新的预测更新,请访问'+website+');
}
否则如果((图形2.length>2)和&(图形3.length>2)和&(图形4.length>2)和&(图形5.length>2)){
var website=SpreadsheetApp.getActiveSheet().getRange('main_gen!'+website_loc.getValue())
SpreadsheetApp.getActiveSheet().getRange('Briefing!'+website_placement5.).setValue('有关最新的预测更新,请访问'+website+');
}

我相信你说的是代码分解。这实际上取决于
if
语句中的对齐方式,如果没有通用模式,您可以保持原样

如果是这样,我的第一次尝试可能是将常见的
If
语句重构为一个函数,例如(您的第一个
else If

然后创建一个条件函数

function condOne(arr1,arr2) {
  return arr1[0] > arr2[0] && arr1[1] > arr2[1] && arr1[2] > arr2[2] && arr1[3] > arr2[3]
}
那么你的原始状态就可以变成

else if (condOne(graphic_arr, [2,3,3,3]) ||...)
如果确实到处都有一些共同的模式,您可以创建和重用其他模式,如
condtow2()
等,那么您可以得到如下结果

注意:相比之下,每个条件函数都有不同的

var graphic_arr = [graphic2.length, graphic3.length, graphic4.length, graphic5.length]
if (condOne(graphic_arr, [ 4 digits])) || condTwo(graphic_arr, [ 4 digits])) || .....) 
elseif (condThree(graphic_arr, [ new 4 digits]) || condTwo(graphic_arr, [another 4 digits]))
.....

运行速度取决于您仅基于当前代码消耗的数据量,只要条件检查符合您的意图,它就没有多大关系。

我相信您谈论的是代码分解。这实际上取决于
a
if (condOne(graphic_arr, [ 4 digits])) || condTwo(graphic_arr, [ 4 digits])) || .....) 
elseif (condThree(graphic_arr, [ new 4 digits]) || condTwo(graphic_arr, [another 4 digits]))
.....