首页 > 解决方案 > 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 变量执行与案例对应的案例,该变量是一个数组,拥有其拆分对象的名称。任何帮助将不胜感激。

标签: javascriptgoogle-apps-scriptgoogle-sheetsswitch-statement

解决方案


请在语句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);
                    }
                  }
                }
              }
    }

推荐阅读