我需要有关 FreeCodeCamp 上收银机挑战的代码方面的帮助。我正在通过除“OPEN”以外的其他检查
对于第二次检查,我得到了正确的细分 ["QUARTER":0.25], ["QUARTER":0.25] 即两个季度,但我不知道如何将它们加在一起并将其返回为 ["QUARTER":0.5] .
对于第三个,细分几乎就在那里,但它并没有带走最后一分钱,所以我在最终细分中缺少一个 [“PENNY”:0.01]。当我检查剩余的零钱时,它是一便士。
所以我真正需要帮助的是将变化作为每种类型单位的组合值返回,看看为什么它不返回第三种情况下的总金额。
function checkCashRegister(price, cash, cid) {
var cashAvailable = cid;
var units = [
["PENNY", 0.01],
["NICKEL", 0.05],
["DIME", 0.1],
["QUARTER", 0.25],
["ONE", 1],
["FIVE", 5],
["TEN", 10],
["TWENTY", 20],
["ONE HUNDRED", 100]
].reverse()
var cashAvailable = cid.slice().reverse()
var stat = {
status: '',
change: []
};
var changeRequired = cash - price;
var totalCash = cashAvailable.flat().filter(x => {
return isNaN(x) == false
}).reduce((a, b) => {
return a + b
}).toFixed(2)
var unitsNeeded = []
if (totalCash == changeRequired) {
stat.status = 'CLOSED'
stat.change = cid
} else if (totalCash < changeRequired) {
stat.status = 'INSUFFICIENT_FUNDS'
stat.change = []
} else if (totalCash > changeRequired) {
for (var i = 0; i < units.length; i++) {
while (changeRequired >= units[i][1] && cashAvailable[i][1] > 0) {
unitsNeeded.push(units[i])
cashAvailable[i][1] -= units[i][1]
console.log((changeRequired -= units[i][1]).toFixed(2))
}
if (changeRequired > units[8][1]) {
stat.status = 'INSUFFICIENT_FUNDS'
stat.change = []
} else {
stat.status = 'OPEN';
stat.change = unitsNeeded
}
}
}
return stat
}
checkCashRegister(3.26, 100, [
["PENNY", 1.01],
["NICKEL", 2.05],
["DIME", 3.1],
["QUARTER", 4.25],
["ONE", 90],
["FIVE", 55],
["TEN", 20],
["TWENTY", 60],
["ONE HUNDRED", 100]
])
checkCashRegister(19.5, 20, [
["PENNY", 1.01],
["NICKEL", 2.05],
["DIME", 3.1],
["QUARTER", 4.25],
["ONE", 90],
["FIVE", 55],
["TEN", 20],
["TWENTY", 60],
["ONE HUNDRED", 100]
])
这是两个检查。