当其中一个键为“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 循环。
我必须创建此找零计算器,其中 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 循环。