当其中一个键为“1”时,如何正确地遍历关联数组?

How to iterate through an associative array properly, when one of the keys is "1"?

我必须创建此找零计算器,其中 returns 您从交易中取回的找零金额以及 returns 来自下方关联数组的硬币。

不幸的是,我无法正确地遍历数组(从最高键 500:"$5" 开始),因为它总是以 1 便士 (1:"1p") 开头,然后是 2 等等。

例如,如果该商品的价格为 5 美元,我支付了 5.75 美元,而不是取回 50 便士、20 便士、5 便士硬币,而是 1 便士、2 便士、5 便士、10 便士、20 便士。

谢谢!

            var coins = {500:"", 200:"", 100: "", 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);});

试试这个:

  var coins = {500:"", 200:"", 100: "", 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 循环。