switch语句中的多个案例(在case语句之后继续)

时间:2013-04-23 22:39:23

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

我正在尝试使用JavaScript函数来执行一个不像普通switch语句那样行事的switch语句(即switchcasebreak)但是,我是不确定如何去做。基本上我想要一个switch语句继续评估案例而不会破坏,直到它结束。即。

function AddData(cell,totalCell) {
  var total = 0;
  switch (cell) {
    case "AUT":
      total = totalCell;
    case "FRA":
      total = total + totalCell;
    case "DEU":
      total = total + totalCell;
    case "GRC":
      total = total + totalCell;
    case "SVK":
      total = total + totalCell;
    break;
  }
  return total;
}

仅供参考,这与Google Spreadsheets一起使用。

非常感谢您提供的任何帮助!

编辑:我希望在电子表格上调用这样的AddData函数:AddData(A:A,B:B),如下所示:

AUT  3.4
FRA  3.3
ITA  4.7
SWE  3.0
FRA  1.1
FRA  3.7
LVA  5.2

在上面的情况中,我希望输出为11.5

我希望这会有所帮助。

1 个答案:

答案 0 :(得分:1)

需要调整一些事情。

  1. 当您使用范围作为参数时,它们将作为二维数组呈现给您的自定义函数。在这种情况下,您打算传递一个列,因此该数组将是一个行数组,其中每一行都是一个包含一个元素的数组。要访问列中的每个单元格,您需要遍历行,如下所示:

    for (var i in cell) { do_something_with( cell[i][0] ) }
    

    使用for (var i=0; i < cell.length; i++)进行循环会更有效(有些人会说,更正确)。

  2. 案例落实 - 因为您似乎想要为每个国家/地区代码执行相同的操作,您只需要一个代码块。 (正如其他人所指出的那样,在每个代码块之后没有break,你的原始代码就会失败并重复第一场比赛后的每一次操作。)

  3. 我认为case "AUT"的原始代码块存在错误,事实上,您确实想要总结所有国家/地区代码。

  4. function AddData(cell,totalCell) {
      var total = 0;
      for (var i in cell) {
        switch (cell[i][0]) {
          case "AUT":
          case "FRA":
          case "DEU":
          case "GRC":
          case "SVK":
            total = total + totalCell[i][0];
            break;
        }
      }
      return total;
    }
    

    问题

    这个功能不健全,你真的应该重新考虑你想要做的事情。

    • 这两个参数具有隐式关系,但它们之间没有明确的连接。这带来了它们在长度或含义上实际上不匹配的风险。这可以通过将多列范围作为输入来改进,从而保证两列匹配。

    • 您希望对案例陈述中列表之外的国家/地区值做什么?现在,其他一切都被悄然忽略了,但如果另外一个国家的价值被输入怎么办...你想要吗? (也许您需要以不同于新值的方式处理空白?如果输入了未知国家/地区,您可能想要throw吗?)