【发布时间】:2018-09-24 14:59:32
【问题描述】:
我正在尝试解决 Freecodecamp 挑战:
设计一个收银机抽屉函数 checkCashRegister(),它接受购买价格作为第一个参数 (price),付款作为第二个参数 (cash),将现金抽屉 (cid) 作为第三个参数。
我几乎解决了它,问题是它没有减去,例如“二十”次它应该。
checkCashRegister(3.26, 100.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]) should return [["TWENTY", 60.00], ["TEN", 20.00], ["FIVE", 15.00], ["ONE", 1.00], ["QUARTER", 0.50], ["DIME", 0.20], ["PENNY", 0.04]].
它应该减去 20$ 三次或 60$ ,它只减去一次。
返回:
[["TWENTY", 20.00], ["TEN", 10.00], ["FIVE", 5.00], ["ONE", 61.00], ["QUARTER", 0.50], ["DIME", 0.20], ["PENNY", 0.04]]
60$ 被添加到“ONE”..
function checkCashRegister(price, cash, cid) {
var change = cash - price;
var changeArray = [];
var val = 0;
var n = [
{name:"PENNY",value:0.01},
{name:"NICKEL",value:0.05},
{name:"DIME",value:0.10},
{name:"QUARTER",value:0.25},
{name:"ONE",value:1.00},
{name:"FIVE",value:5.00},
{name:"TEN",value:10.00},
{name:"TWENTY",value:20.00},
{name:"ONE HUNDRED",value:100.00}
];
var den = n.reverse();
var register = cid.reduce(function(accumulator, next) {
return accumulator+next[1];
}, 0);
if(register === change) {
return "Closed";
}else if(register < change) {
return "Insufficient Funds";
}
else {
}
for(var i=0;i<cid.length;i++) {
val=0;
while(cid[i][1] >= 0 && change >= den[i].value) {
change -= den[i].value;
change = Math.round(change * 100) / 100;
cid[i][1] -= den[i].value;
val += den[i].value;
}
if(val !== 0) {
changeArray.push([den[i].name, Number(val.toFixed(2))]);
}
}
if(changeArray.length < 1 || change > 0) {
return "Insufficient Funds";
}
return changeArray;
}
【问题讨论】:
标签: javascript loops while-loop