You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JavaScript多条件if-else语句转换为switch case?

解决方案:将多条件if-else转换为Switch语句(附更优维护方案)

没问题,我来帮你搞定这个转换!先提个关键的小问题:你原代码里一开始获取的是bulkType和bulkQty,但后面判断的却是serviceType和serviceQty,这明显是变量名写错了;另外按钮id是calcValue,JS里却绑定了calcBtn,这俩错误得先修正,不然代码运行会直接失效。

下面给你两种可行的重构方案:

方案一:Switch语句处理双条件

Switch本身是针对单个表达式的,所以我们可以把serviceType和serviceQty组合成唯一标识(比如字符串${serviceType}-${serviceQty}),用这个标识匹配case:

$(document).ready(function() {
  $("#calcValue").click(function() {
    // 修正变量名,对应表单实际id
    var serviceType = $("#serviceType option:selected").val();
    var serviceQty = $("#serviceQty option:selected").val();
    let price;

    if (serviceType == 0 || serviceQty == 0) {
      $("#service_final_price").html('<br/><h3 class="text-danger"><i class="fas fa-info-circle"></i> Select required fields.</h3>');
    } else {
      // 组合双条件为唯一字符串
      const conditionKey = `${serviceType}-${serviceQty}`;
      switch(conditionKey) {
        case "1-1":
          price = 10000 * 0.18;
          break;
        case "1-2":
          price = 25000 * 0.16;
          break;
        case "1-3":
          price = 50000 * 0.14;
          break;
        case "1-4":
          price = 100000 * 0.12;
          break;
        case "2-1":
          price = 10000 * 0.26;
          break;
        case "2-2":
          price = 25000 * 0.24;
          break;
        case "2-3":
          price = 50000 * 0.20;
          break;
        case "2-4":
          price = 100000 * 0.18;
          break;
        case "3-1":
          price = 10000 * 0.28;
          break;
        case "3-2":
          price = 25000 * 0.26;
          break;
        case "3-3":
          price = 50000 * 0.24;
          break;
        case "3-4":
          price = 100000 * 0.20;
          break;
        default:
          // 处理异常选择情况
          $("#service_final_price").html('<br/><h3 class="text-danger">Invalid selection.</h3>');
          return;
      }
      $("#service_final_price").html('<br/><h3>' + price.toFixed(0) + '/- Only</h3>');
    }
  });
});

方案二:对象映射(更简洁易维护)

对于这种固定的键值对判断,用对象映射比Switch更优雅,代码更紧凑,后续修改价格或新增服务类型时,直接修改映射表就行,不用动逻辑:

$(document).ready(function() {
  $("#calcValue").click(function() {
    var serviceType = $("#serviceType option:selected").val();
    var serviceQty = $("#serviceQty option:selected").val();

    if (serviceType == 0 || serviceQty == 0) {
      $("#service_final_price").html('<br/><h3 class="text-danger"><i class="fas fa-info-circle"></i> Select required fields.</h3>');
      return;
    }

    // 定义价格映射表,键为"type-qty",值为对应价格
    const priceMap = {
      "1-1": 10000 * 0.18,
      "1-2": 25000 * 0.16,
      "1-3": 50000 * 0.14,
      "1-4": 100000 * 0.12,
      "2-1": 10000 * 0.26,
      "2-2": 25000 * 0.24,
      "2-3": 50000 * 0.20,
      "2-4": 100000 * 0.18,
      "3-1": 10000 * 0.28,
      "3-2": 25000 * 0.26,
      "3-3": 50000 * 0.24,
      "3-4": 100000 * 0.20
    };

    const conditionKey = `${serviceType}-${serviceQty}`;
    const price = priceMap[conditionKey];

    if (price === undefined) {
      $("#service_final_price").html('<br/><h3 class="text-danger">Invalid selection.</h3>');
    } else {
      $("#service_final_price").html('<br/><h3>' + price.toFixed(0) + '/- Only</h3>');
    }
  });
});

内容的提问来源于stack exchange,提问作者Zoobi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:18:20