我正在尝试使用JavaScript函数来执行一个不像普通switch语句那样行事的switch语句(即switch
,case
,break
)但是,我是不确定如何去做。基本上我想要一个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
我希望这会有所帮助。
答案 0 :(得分:1)
需要调整一些事情。
当您使用范围作为参数时,它们将作为二维数组呈现给您的自定义函数。在这种情况下,您打算传递一个列,因此该数组将是一个行数组,其中每一行都是一个包含一个元素的数组。要访问列中的每个单元格,您需要遍历行,如下所示:
for (var i in cell) { do_something_with( cell[i][0] ) }
使用for (var i=0; i < cell.length; i++)
进行循环会更有效(有些人会说,更正确)。
案例落实 - 因为您似乎想要为每个国家/地区代码执行相同的操作,您只需要一个代码块。 (正如其他人所指出的那样,在每个代码块之后没有break
,你的原始代码就会失败并重复第一场比赛后的每一次操作。)
我认为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
吗?)