如何将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
相关产品推荐
相关产品推荐

