通过嵌套其他if语句同时缩进javascript代码

时间:2014-01-28 17:39:52

标签: javascript google-apps-script google-docs

我目前正试图将我在Google Scripts中编写的一些代码从很多字符中压缩到更少。

目前,我的代码看起来像这样 - 我需要为每一行写32次,变量cell2A2将在此代码的每个块上增加1(最多{ {1}}和cell32):

A32

然而,为了浓缩这一点,我尝试设置以下功能:

if (cell2 == condition1) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color1);
  else if(cell2 == condition1) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color1);
  else if(cell2 == condition2) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color2);
  else if(cell2 == condition3) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color3);
  else if(cell2 == condition4) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color4);
  else if(cell2 == condition5) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color5);
  else if(cell2 == condition6) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color6);
  else if(cell2 == condition7) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color7);
  else if(cell2 == condition8) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color8);
  else if(cell2 == condition9) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color9);
  else if(cell2 == condition10) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color10);
  else if(cell2 == condition11) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color11);
  else if(cell2 == condition12) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color12);
  else if(cell2 == condition13) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color13);
  else if(cell2 == condition14) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color14);
  else 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor('white'); 

我正在尝试通过使用while循环来完成设置大块文本,并在循环的每次迭代期间将function updateColor(range) { var cell = range; var condition = "condition"; var number = cell.replace("$B", ""); var i = 0; if (cell == condition+i) { spreadsheet.getRange(spreadsheet.getRange("A"+number).offset(0, 0, 1,3).getA1Notation()).setBackgroundColor(color1); } while (i<=14) { else if(cell == condition+i) { spreadsheet.getRange(spreadsheet.getRange("A"+number).offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color+i); } i++; } else { spreadsheet.getRange(spreadsheet.getRange("A"+number).offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor('white'); } 内的变量递增1。我遇到的问题是代码没有运行 - 它挂在我认为是else if的行上,因为我无法启动while循环中的else ifelse if已经在此函数之前定义,1到14。

我如何编写这个循环以便从底部生成顶部,在执行时生成较小的函数,或者是否无法压缩这个我正在尝试的方式?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果理解正确你想要的是减少你代码中if语句的数量,如果是这样的话,我将做的是创建一个带有“条件”或条件标识符和颜色的哈希表这个:

var hasTable = {
    "condition1": "#fff000",
    "condition2": "#55BC00",
    "condition3": "#ECECEC",
    "condition4": "green"
    /*... so on, so forth*/
};
if (hasTable[cell2])
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(hasTable[cell2]);
else
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor('white');
相关问题