JavaScript实现GB/MB单位转数值 简化多if else转换逻辑
JavaScript带宽单位转换简洁实现方案
问题背景
需要实现单位转换逻辑,固定换算规则为:
- 1 MB 对应数值 1,1 GB 对应数值 1000
- 输入仅包含 MB、GB 两种单位,可能附带
PS后缀(如GBPS、MBPS),不会出现KB、字节等其他单位 - 原有实现通过大量
if else硬编码枚举每个具体输入值,示例代码如下:
var bw; var value; if (bw.toUpperCase() == '1 GB' || bw.toUpperCase() == '1 GBPS') { value = 1000; } else if (bw.toUpperCase() == '2.5 GB' || bw.toUpperCase() == '2.5 GBPS') { value = 2500; }
这种写法需要为每一个可能的输入值单独写分支,可维护性极差,需要通用的简洁实现。
实现思路
不需要枚举所有可能的输入值,直接从输入字符串中解析出数值部分和单位部分,按照单位对应的换算倍率统一计算即可,覆盖所有同规则的输入场景。
可直接复用的代码
function parseBandwidthValue(bwInput) { // 统一去除首尾空格、转大写,兼容不同大小写、前后空格的输入 const normalizedInput = bwInput.trim().toUpperCase(); // 匹配字符串开头的数字,支持整数、小数格式 const numberPart = normalizedInput.match(/^(\d+\.?\d*)/); // 非法格式兜底返回0,可根据业务需求调整 if (!numberPart) return 0; const baseNum = parseFloat(numberPart[1]); // 识别单位:GB类单位倍率为1000,MB类单位倍率为1 const multiplyRate = normalizedInput.includes('GB') ? 1000 : 1; return baseNum * multiplyRate; }
效果验证
所有规则内的输入都能得到正确结果,不需要单独加判断:
- 输入
1 GB/1 GBPS→ 返回1000 - 输入
2.5 GB/2.5 GBPS→ 返回2500 - 输入
50 MB/50 MBPS→ 返回50 - 输入
1 MB/1 MBPS→ 返回1 - 其他任意同规则输入(如
10 GB、200 MB、0.5 GB等)都可以自动计算正确结果
内容的提问来源于stack exchange,提问作者user15754268
相关产品推荐
相关产品推荐

