2015-02-23 70 views
2

我在HTML5和JavaScript中編寫貨幣轉換應用程序,並對轉換率進行了硬編碼。問題是有33種貨幣我希望能夠進行轉換。這就產生了一個問題,因爲我能想到的唯一方法就是使用if語句,這意味着我將不得不編寫1056 if語句。 即替代數百/數千條if語句

if (homeCountry = "uk" and destinationCountry = "france") { 
    rate = 1.32; 
} 
if (homeCountry = "uk" and destinationCountry = "japan") { 
    rate = 183.79; 
} 

英國所有的轉化,然後

if (homeCountry = "japan" and destinationCountry = "france") { 
    rate = 0.0074; 
} 
if (homeCountry = "japan" and destinationCountry = "china") { 
    rate = 0.053; 
} 

對於所有日語converions等

即使使用switch語句,這將仍然是一個巨大的代碼輸入量。我想知道是否有人可以想出一個解決方案,使它稍微乏味。我一直在想一段時間的解決方案,現在我卡住了。誰能幫忙?由於

+8

如何使用2dson對象,例如'var rates = {uk:{japan:183.79,france:1.32},japan:{france:0.0074,china:0.053}}'然後使用rate = rates [homeCountry] [destionationCountry]'; – 2015-02-23 16:50:16

+2

嗯,它是一個33x33的簡單矩陣 - 所以您可以將所有轉換存儲在表格中並根據貨幣單位查找(如果我是你,我不會使用「國家」)。當然,你可以很容易地刪除一半的值,因爲'A - > B'與'B - > A'相反。所有貨幣都可以相互轉換,因此您可以使用一種貨幣作爲參考價值,並且僅將此參考價格的33次轉換存儲到其他貨幣中。 – Luaan 2015-02-23 16:51:19

+1

@Luaan使用參考貨幣肯定是最好的解決方案 – howderek 2015-02-23 16:55:07

回答

5

爲什麼不創造一種哈希表像

conversions: { 
    uk: { 
     france: 1.12, 
     japan: 2.12 
    }, 
    france: { 
     uk: 1.22, 
     japan: 2.3 
    }, 
    japan: { 
     france: 2.2, 
     uk: 3.4 
    } 
    } 

那麼你可以去conversions[homeCountry][destinationCountry]訪問。

+1

好吧,我感覺有點不好,因爲發佈後,我看到@Dave Goten寫了評論幾乎相同的東西 – Quince 2015-02-23 16:52:56

+2

打字速度不應該是擔心你的事情。它不是打字比賽,它是一個幫助論壇 – Sharky 2015-02-23 16:54:54

+0

這裏有很多重複的數據,並且在維護時充滿了潛在的錯誤。看起來將每個轉換率設置爲一種通用貨幣(可能是美元或歐元)會更有意義,然後您可以首先轉換爲通用貨幣,從而計算從任意一種貨幣到另一種貨幣的匯率。這將只會有一次列出的貨幣,不會有衝突的雙重維護數據。 – jfriend00 2015-02-23 17:34:22

2

也許你可以使用尺寸爲33x33的二維數組來做到這一點,例如,如果你訪問位置(4,10),你會得到第4和第10語言之間的比例。

另一種方法是使用中間貨幣(如果可能的話):首先從初始貨幣轉換爲美元,然後從美元轉換爲目標貨幣。

希望這會有所幫助。

0

使用對象:

hardcoded_data = 
{ 
    'uk' : { 'france' : '1.32', 'japan' : '183.79' }, 
    'japan' : { 'france' : '0.0074', 'japan' : '0.053' } 
}; 
7

創建一個對象,將包含利率與問候美元僅

var rates = { 
    usd: 1, 
    eur: 0.77, 
    gbp: 0.63 
} 

然後創建一個像這樣的功能:

function convertRate(src, dest, val){ 
    if(src=='usd'){ 
    return val*rates[dest]; 
    } 
    else{ 
    return val * 1/rates[src] * rates[dest]; 
    } 
} 

讓我們測試!

convertRate('usd','eur',130); 
convertRate('eur','gbp',130); 

做同樣的無功能,只是一個單一的2D陣列具有稍好的性能,內存消耗不是一個問題,但填充二維數組像這樣的繁瑣。以我建議的方式做到這一點更容易,我認爲你不會注意到任何性能差異。

+1

這是最好的解決方案。 – Bergi 2015-02-23 17:39:19