2015-07-11 60 views
0

我必須創建此更改計算器,它返回您從事務中返回的更改量,並且還返回下面關聯數組中的硬幣。如何正確地遍歷關聯數組,當其中一個鍵是「1」?

不幸的是我無法通過遍歷數組正確(最高鑰匙500起:「$ 5」),因爲它總是以1個便士(1:「1P」)開始,然後2等

所以對於例如,如果物品的價格爲5美元,我支付5.75美元,而不是返回50p,20p,5p,硬幣,它是1p,2p,5p,10p,20p。

謝謝!

  var coins = {500:"$5", 200:"$2", 100: "$1", 50: "50p", 20:"20p", 10:"10p", 5:"5p", 2:"2p", 1:"1p"}; 
     $('#calc').click(function(){ 
      var priceVar = document.getElementById("price").value; 
      var paidVar = document.getElementById("paid").value;     
      var result = (paidVar - priceVar).toFixed(2); 
      var paidCents = result * 100; 
      var coinList = ""; 
       for(var key in coins) { 
        if (paidCents >= key) { 
         paidCents -= key; 
         coinList += coins[key]; 
        }  
       }  
      $('#change').html("$"+result); 
      $('#coins').html(coinList);}); 
+0

你的數組看起來像這個'coins = [{denom:「$ 5」,value:500},{denom:「$ 2」,value:200} ... etc]'或者它必須和你一樣展示下?如果你可以將它設置爲一個對象數組,你可以按順序遍歷它們 –

+0

我想知道的另外一件事情 - 你使用美元和「p」。不是美元和美分「C」? –

+0

不幸的是,它必須是這樣的:(它曾經是英鎊符號而不是美元,但由於某種原因,它在我的瀏覽器中以一種奇怪的方式顯示它可能是一個語言包問題 –

回答

0

試試這個:

var coins = {500:"$5", 200:"$2", 100: "$1", 50: "50p", 20:"20p", 10:"10p", 5:"5p", 2:"2p", 1:"1p"}; 
     $('#calc').click(function(){ 
      var priceVar = document.getElementById("price").value; 
      var paidVar = document.getElementById("paid").value;     
      var result = (paidVar - priceVar).toFixed(2); 
      var paidCents = result * 100; 
      var coinList = ""; 
while(paidCents > 0){ 
       for(var key in coins) { 
        if (paidCents < key || key == '500') { 
if(key == '500' && paidCents >= key){ lasttry = key; } 
         paidCents -= lasttry; 
         coinList += coins[lasttry]; break; 
        } lasttry = key;  
       }  } 
      $('#change').html("$"+result); 
      $('#coins').html(coinList);}); 

兩件事情: - 即使你的對象有500開始,JavaScript的還是會圍着它轉,最低將是第一個,當你通過它循環。 - 同樣在你的for循環中,它只會使用每種類型的硬幣中的一種。所以對於45,它不會需要兩次20.這就是爲什麼我必須使用while循環。

+0

剛剛測試過它,例如當價格爲4美元,而你支付了6.75美元時,它會返還5美元硬幣的變化嗎? –

+0

你說得對,在PayCents和鑰匙之間的'<'(如果(key =='500'&& paidCents '。對不起,現在檢查它 – OSDM

+0

它工作的一切除了當變化是$ 5。(它顯示$ 2 $ 2 $ 1),所以我添加了一個額外的if語句:if(paidCents == '500'){ \t \t \t \t \t \t \t coinList + = 「5 $」; \t \t \t \t \t \t \t paidCents = 0; \t \t \t \t \t \t \t break; \t \t \t \t \t \t} –