如何优化Google式长度转换器的冗余if/else代码?
优化长度转换器代码的方案
你的代码通过大量if/else语句实现单位转换,虽然功能正常,但扩展性差且冗余。推荐使用基准单位转换法,将所有单位统一转换为基准单位(比如米),再从基准单位转换为目标单位,这能大幅简化代码。
具体实现步骤:
- 定义单位转换因子:创建一个对象,存储每个单位与米的换算关系(即1个该单位等于多少米)。
- 统一转换逻辑:先将输入值转为米,再从米转为目标单位,无需逐个处理单位对。
优化后的代码:
const input = document.getElementById("input"); const inputType = document.getElementById("inputType"); const output = document.getElementById("output"); const outputType = document.getElementById("outputType"); // 存储各单位与米的换算关系:1单位 = X米 const unitFactors = { "m": 1, "Cm": 0.01, "Mm": 0.001, "Km": 1000, "mm": 1e-6, // 微米 "Nm": 1e-9, // 纳米 "Mi": 1609, // 英里 "Y": 0.9144, // 码(对应原代码1m≈1.094码的近似值) "f": 0.3048, // 英尺(对应原代码1m≈3.281英尺) "In": 0.0254, // 英寸(对应原代码1m≈39.37英寸) "NM": 1852 // 海里 }; const finalResult = () => { const inputValue = Number(input.value); // 处理非数字输入 if (isNaN(inputValue)) { output.value = ""; return; } const fromUnit = inputType.value; const toUnit = outputType.value; // 先转成米,再转成目标单位 const meters = inputValue * unitFactors[fromUnit]; const result = meters / unitFactors[toUnit]; output.value = result; };
优势:
- 代码简洁:从450行缩减到几十行,逻辑清晰。
- 扩展性强:新增单位只需在
unitFactors中添加一条记录,无需修改转换逻辑。 - 维护方便:换算因子集中管理,修改精度或调整数值只需改一处。
内容的提问来源于stack exchange,提问作者Sarkis Helvajian
相关产品推荐
相关产品推荐

