我很难找到将不同类型的单位转换为各种其他类型的有效方法。
切换案例可行,但IMO不是一种有效的方式,我将拥有3种不同的系统(SI,Imperial和US)。
我的转换器(在我的应用内部)将始终从SI转换为某种东西或从某种东西转换为SI。它降低了复杂性,但我仍然需要有关如何制作干净代码的建议。
我已经定义了我的转换输入参数是Value(数字)和Unit(字符串) 我有2个功能。 SIToSomething(值,单位)和SOmethingToSi(值,单位)。
单位被定义,因为我将转换长度,重量,数量等。
你会建议什么?
答案 0 :(得分:3)
这个怎么样:
var converters = {
'SIToImperial' : {
'cm' : function(val) {
// implementation, return something
},
'kg' : function(val) {
// implementation, return something
} //, etc.
},
'SIToUS' : {
'cm' : function(val) {
// implementation, return something
},
'kg' : function(val) {
// implementation, return something
} //, etc.
},
'USToSI' : {
'cm' : function(val) { /* ... */ } // etc
} // , etc
}
SIToSomething(value, unit, system) {
return converters["SITo" + system][unit](value);
}
var meterInImperial = SIToSomething(100, 'cm', 'Imperial');
var fiftyKilosInUS = SIToSomething(50, 'kg', 'US');
答案 1 :(得分:2)
您可以做的是拥有一个基本单元,并为每个目标单元定义与此基本单元之间的转换功能。然后,要从A转换为B,例如,您将拥有:
A -> base -> B
这样,每个单元只需要两个转换功能(不计算基本单位):
var units = {
a: {
toBase: function(value) { return value * 2; },
fromBase: function(value) { return value / 2; }
},
b: {
toBase: function(value) { return 1.734 * value + 48; },
fromBase: function(value) { return (value / 1.734) - 48; }
}
}
function convertFromTo(unitA, unitB, value) {
return unitB.fromBase(unitA.toBase(value));
}
convertFromTo(units.a, units.b, 36489);
答案 2 :(得分:0)
对SI进行所有转换。例如,如果转换为Imperial-> US,您将使用Imperial-> SI-> US。
这是您可以投入的最小努力。它还可以“免费”获得SI。