1

我试图让一个 JavaScript 函数来执行一个与普通 switch 语句(即switch, case, break)不同的 switch 语句,但是我不知道该怎么做。基本上,我想要一个 switch 语句来继续评估这些案例而不会中断,直到它结束。IE

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 电子表格一起使用。

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

编辑:我希望像这样调用 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

我希望这有帮助。

4

1 回答 1

1

有几件事需要调整。

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

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

    循环使用for (var i=0; i < cell.length; i++).

  2. 案例失败 - 由于您似乎希望对每个国家/地区代码执行相同的操作,因此您只需要一个代码块。(正如其他人指出的那样,如果没有breakafter each 代码块,您的原始代码将会失败并在第一次匹配之后重复每个操作。)

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

代码

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如果输入了未知国家,也许您想这样做?)

于 2013-05-24T14:03:39.113 回答