Javascript 将单位从一个系统转换为另一个系统的有效方法

Javascript 将单位从一个系统转换为另一个系统的有效方法,javascript,algorithm,Javascript,Algorithm,我很难找到一种有效的方法来将不同类型的单元转换成不同的其他类型 切换情况下会工作,但在国际海事组织,这不是一个有效的方式,我将有3个不同的系统(SI,帝国和美国) 我的转换器(在我的应用程序中)将始终从SI转换为某物或从某物转换为SI。它降低了复杂度,但我仍然需要关于如何生成干净代码的建议 我已经定义了用于转换的输入参数是值(数字)和单位(字符串)。 我有两个功能。SitoMething(值,单位)和SOmethingToSi(值,单位) 单位是定义的,因为我将转换长度、重量、数量等 你有什么建

我很难找到一种有效的方法来将不同类型的单元转换成不同的其他类型

切换情况下会工作,但在国际海事组织,这不是一个有效的方式,我将有3个不同的系统(SI,帝国和美国)

我的转换器(在我的应用程序中)将始终从SI转换为某物或从某物转换为SI。它降低了复杂度,但我仍然需要关于如何生成干净代码的建议

我已经定义了用于转换的输入参数是值(数字)和单位(字符串)。
我有两个功能。SitoMething(值,单位)和SOmethingToSi(值,单位)

单位是定义的,因为我将转换长度、重量、数量等

你有什么建议?

这个怎么样:

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');
这个怎么样:

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');

您可以做的是拥有一个基本单元,并为每个目标单元定义与该基本单元之间的转换函数。然后,例如,要从A转换为B,您需要:

A -> base -> B
这样,每个单位只需要两个转换函数(不包括基本单位):


您可以做的是拥有一个基本单元,并为每个目标单元定义与该基本单元之间的转换函数。然后,例如,要从A转换为B,您需要:

A -> base -> B
这样,每个单位只需要两个转换函数(不包括基本单位):


执行与SI之间的所有转换。例如,如果转换Imperial->US,您将转到Imperial->SI->US


这是你能投入的最小努力。它还可以“免费”获取SI。

执行与SI之间的所有转换。例如,如果转换Imperial->US,您将转到Imperial->SI->US



这是你能投入的最小努力。它还免费为您提供SI。

好吧,我仍然需要4个大开关箱,一个用于SiToIMp、SIToUS、USToSI、IMPToSi。。。这就是我不想做的:那不是一个开关箱。这将是一个功能表。您甚至可以在不同的位置定义每个函数。我不确定我是否理解,但经过编辑后可以兼顾单元和系统。我不明白为什么它需要任何开关@Fawarooks对我来说非常合理+1我不熟悉JS中的函数数组或OOP。我错过了数组中的函数部分:S。按照我现在的理解(我认为),你会对每个单元使用SIToImperial,SIToUS对每个单元使用SIToUS,但功能不同,相反的选择是IMPToSi和USToSI。因此,不知何故,我会有4个相同的表,它们有不同的函数要调用。无论如何,是否会有一个表调用正确的功能(降低内存使用)。我仍然会被困在4个大开关盒中,一个用于SiToIMp、SIToUS、USToSI、IMPToSi。。。这就是我不想做的:那不是一个开关箱。这将是一个功能表。您甚至可以在不同的位置定义每个函数。我不确定我是否理解,但经过编辑后可以兼顾单元和系统。我不明白为什么它需要任何开关@Fawarooks对我来说非常合理+1我不熟悉JS中的函数数组或OOP。我错过了数组中的函数部分:S。按照我现在的理解(我认为),你会对每个单元使用SIToImperial,SIToUS对每个单元使用SIToUS,但功能不同,相反的选择是IMPToSi和USToSI。因此,不知何故,我会有4个相同的表,它们有不同的函数要调用。是否会有一个表调用正确的函数(降低内存使用率)。我定义SI为基本单位:P这就是为什么我只有from SI和to SiOK,忽略了您已经要转换为基本单位,但是我的单位转换表仍然很好。convertFromTo函数中unitA和unitB的类型是什么?a和b是不同的度量单位(即克和升?),我假设每个类别都有不同的单位集,比如
长度单位
重量单位
,等等。我不知道具体的英制和美制单位,所以我坚持使用“a”和“b”。例如,可能是“华氏度”和“摄氏度”都转换为“开尔文”作为基准。我定义了SI是那个基准单位:P这就是为什么我只有从SI和到SiOK,忽略了你们已经要转换为基准单位,但是我的单位转换表仍然很好。convertFromTo函数中unitA和unitB的类型是什么?a和b是不同的度量单位(即克和升?),我假设每个类别都有不同的单位集,比如
长度单位
重量单位
,等等。我不知道具体的英制和美制单位,所以我坚持使用“a”和“b”。例如,可能是“华氏”和“摄氏”都转换为“开尔文”作为基准。这就是我想要做的。我需要的是比开关箱更好的方式来转换克或升或任何东西。函数数组似乎是一个很好的方法。这就是我想要做的。我需要的是比开关箱更好的方式来转换克或升或任何东西。函数数组似乎是一个很好的方法