javascript - Switch 语句无视输入并执行所有情况
问题描述
我正在尝试使用谷歌表格和谷歌应用脚本创建一个杂货成本划分系统来创建它。我在尝试使用嵌套在 for 循环中的 switch 语句时遇到问题,该循环遍历与特定购买相关的所有人员并根据他们的姓名进入案例,然后将值添加到另一张有总购买量的工作表。
for (var i = 1; i < 6; i++) {
people.push(data[i][0]);
values.push(data[i][1]);
if(values[i-1] != 0.0){
var splits = (data[i][2]);
splits = splits.split(',');
var splitprice = values[i-1].toFixed(2);
Logger.log(`Values: ${values[i-1]} splits: ${splits} split length: ${Object.keys(splits).length} Split Price: ${splitprice}`);
switch (people[i-1]) {
case 'Aiden':
Logger.log('In Aiden case: '+splits);
Aiden(splits,splitprice);
return;
case 'Ben':
Logger.log('In Ben case: '+splits);
Ben(splits,splitprice);
break;
case 'Joe':
Logger.log('In Joe case: '+splits);
Joe(splits,splitprice);
break;
case 'Malcolm':
Logger.log('In Macolm case: '+splits);
Malcolm(splits,splitprice);
break;
case 'Marcel':
Logger.log('In Marcel case: '+splits);
Marcel(splits,splitprice);
return;
}
}
}
在此代码中,它检查与购买者相对应的单元格,并通过 switch 语句根据此人输入正确的函数。
function Aiden(splitbtwn,total){
for(var j=0; j <= splitbtwn.length + 1; j++) {
var splitprice = (total/(splitbtwn.length + 1)).toFixed(2);
switch (splitbtwn[j]) {
case "All":
splitbtwn = "Ben,Joe,Malcolm,Marcel";
splitprice = (total/5);
case "Ben":
for(var k = 3; k < 1000; k++) {
var Ben2Aid = ('Payables!F' + k)
var checker = sheet.getRange(Ben2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Ben2Aid).setValue(splitprice);
break;
}
}
case "Joe":
for(var k = 3; k < 1000; k++) {
var Joe2Aid = ('Payables!K' + k)
var checker = sheet.getRange(Joe2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Joe2Aid).setValue(splitprice);
break;
}
}
case "Malcolm":
for(var k = 3; k < 1000; k++) {
var Mal2Aid = ('Payables!P' + k)
var checker = sheet.getRange(Mal2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Mal2Aid).setValue(splitprice);
break;
}
}
case "Marcel":
for(var k = 3; k < 1000; k++) {
var Mar2Aid = ('Payables!U' + k)
var checker = sheet.getRange(Mar2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Mar2Aid).setValue(splitprice);
return;
}
}
}
}
}
每个人都有自己的函数,该函数使用参数调用,以查看分配给谁。我的问题是它在第二个函数中执行每个单独的 switch 案例,而不是根据 splitbtwn 变量执行与案例对应的案例,该变量是一个数组,拥有其拆分对象的名称。任何帮助将不胜感激。
解决方案
请在语句break
末尾移动case
function Aiden(splitbtwn,total){
for(var j=0; j <= splitbtwn.length + 1; j++) {
var splitprice = (total/(splitbtwn.length + 1)).toFixed(2);
switch (splitbtwn[j]) {
case "All":
splitbtwn = "Ben,Joe,Malcolm,Marcel";
splitprice = (total/5);
case "Ben":
for(var k = 3; k < 1000; k++) {
var Ben2Aid = ('Payables!F' + k)
var checker = sheet.getRange(Ben2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Ben2Aid).setValue(splitprice);
}
}
break;
case "Joe":
for(var k = 3; k < 1000; k++) {
var Joe2Aid = ('Payables!K' + k)
var checker = sheet.getRange(Joe2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Joe2Aid).setValue(splitprice);
}
}
break;
case "Malcolm":
for(var k = 3; k < 1000; k++) {
var Mal2Aid = ('Payables!P' + k)
var checker = sheet.getRange(Mal2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Mal2Aid).setValue(splitprice);
}
}
break;
case "Marcel":
for(var k = 3; k < 1000; k++) {
var Mar2Aid = ('Payables!U' + k)
var checker = sheet.getRange(Mar2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Mar2Aid).setValue(splitprice);
}
}
}
}
}
推荐阅读
- spring-boot - 如何排除 Spring Boot 组件在 JUnit 单元测试中运行?
- javascript - Chrome不允许保持登录iframe - Angular
- airflow - 气流任务卡住:任务处于“运行”状态,这不是执行的有效状态。必须清除任务才能运行
- lua - 循环直到按键释放或按键按下
- python-3.x - 在 python 中使用 factor_analyzer 和 Scree Plots 理解特征值
- r - rvest::read_html() 几乎不提取此网页的任何 html 代码
- css - 无法将聊天输入与 CSS 中的 div 底部对齐
- python - Python3.8中将汉字传递给argparse
- javascript - Vue 组件中的 props 是可变的吗?
- tesseract - 当前版本的 pytesseract 产生错误的字符串