我有一个if / else代码块,它返回从/到某个度量单位转换所需的数字,例如,如果我想从100
转换为cm
,它将返回mm
//TODO: refactor
if(scope.convertFrom == "mm" && scope.convertTo == "in") {
_mod = 25.4;
}
if(scope.convertFrom == "mm" && scope.convertTo == "ft") {
_mod = 304.8;
}
//...
。
以下是实际代码:http://plnkr.co/edit/WKutYRbB8d2BFiXvfsBE?p=preview(第24-31行)。
现在,虽然我现在这样做的方式会起作用,如果我必须编写公制单位的所有可能组合,我最终会得到一个非常大且丑陋的if / else语句块。
我的问题是如何避免这种情况并使代码更小/更清洁?
编辑:在这里提取重要的一行:
PackageManager pm = getPackageManager();
答案 0 :(得分:2)
创建一个存储" weight"的对象。每个单元(请注意,我使用Meter作为我的定位点,所以如果你想添加Foot或Inch,请记住这一点):
var units = {
mm: 0.001,
cm: 0.01,
dm: 0.1,
m: 1,
km: 1000
}
然后写一个转换函数:
function convert(value, fromUnit, toUnit) {
return value * (units[fromUnit] / units[toUnit])
}
像这样使用:
convert(42, 'mm', 'cm')
// --> 4.2
答案 1 :(得分:0)
如果library不是'一个选项。
取一些价值,例如mm默认值,然后为每个项目存储与给定基本单位的比率。然后,您可以将这些值保留在标记中或代码本身中。
<option value="mm" data-ratio="1">Millimeters</option>
<option value="in" data-ratio="0.0393701">Inches</option>
然后在代码中
var converted = value * (scope.convertFrom.getAttribute('data-ratio') / scope.convertTo.getAttribute('data-ratio'))