2012-10-09 55 views
0

我使用Javascript構建單位轉換器。我想要做的就是在這樣的一個陣列存儲或預先定義所有的單位價值:使用Javascript數組(或對象)的單位轉換器

var converter_table = { 
    'mass' : { 
     'kilogram' : 1000, 
     'gram' : 1, 
     'ounce' : .035274, 
     'pound' : .00220462 
    }, 

    'length' : { 
     'kilometer' : 1000, 
     'meter' : 1 
    } 
}; 

然後能夠拉出來的值,並根據用戶輸入的計算。例如:

var quantity = 25, 
    category = 'mass', 
    from_unit = 'kilogram', 
    to_unit = 'pound'; 


var result = quantity * converter_table.category.from_unit * converter_table.category.to_unit; 

alert(result); 

當然,converter_table.category.from_unit沒有定義。有什麼辦法可以解決這個問題嗎?

+1

的可能重複[動態對象屬性的名稱(http://stackoverflow.com/questions/4244896/dynamic-object-property-name) –

+0

注意正確距離的基數[SI單位](http://en.wikipedia.org/wiki/International_System_of_Units#Units_and_prefixes)的拼寫是米,「米」是用於測量物體的設備(如水錶)。您可能需要一個同義詞庫才能將一個詞典轉換爲另一個詞典以允許用戶差異 – RobG

回答

2

您可以使用數組符號:

var result = quantity * converter_table[category][from_unit] * converter_table[category][to_unit]; 
+0

並非如此簡單。通常需要一個共同的(中間)單位,所以當從每小時英里轉換爲結時,轉換爲m/h - > km/h - > knots。否則,您需要爲每個轉化組合存儲轉化因子。 – RobG

+0

@RobG所有單位值都被轉換爲相當於一個公共單位。例如,長度的通用單位是米。所以千米數值是1000,釐米數值是0.01。如果你想轉換2公里到釐米,它就像乘以2×1000×.01一樣簡單。 – Kama

+0

問題不在於算法,只是如何用變量名稱訪問他的對象。無論如何,看起來他預先選擇了他關心的常見轉換因子。 – Bill