我一直未能通过测试,要求输出是具有状态键和更改之一的对象。更改值必须是包含2个项目的数组。变更的面额和变更的价值。每次记录输出时,都会得到正确的格式,但是测试仍然失败。这是我的密码
const REGISTER_STATUS =
{open:"OPEN",closed:"CLOSED",insufficientFunds:"INSUFFICIENT_FUNDS"}
function checkCashRegister(price, cash, cid) {
var cashRegister = {status:"",change:cid};
var changeNeeded = parseFloat(cash - price).toFixed(2);
var totalChangeAvailable = getTotalChange(cid);
cashRegister.status =
getRegisterStatus(changeNeeded,totalChangeAvailable)
if(cashRegister.status === REGISTER_STATUS.insuffecientFunds){
return cashRegister.change = [];
}
cashRegister.change = getCustomerChange(changeNeeded,cid)
if(changeNeeded > getTotalChange(cashRegister.change)){
cashRegister.status = REGISTER_STATUS.insufficientFunds;
cashRegister.change = [];
}
if(cashRegister.status === REGISTER_STATUS.closed){
cashRegister.change = [...cid]
}
return cashRegister
}
const getCustomerChange = (changeNeeded,cid)=>{
var change = [];
var allCurrencyValues = {
"PENNY" : 0.01,
"NICKEL" : 0.05,
"DIME" : 0.10,
"QUARTER": 0.25,
"ONE" : 1.00,
"FIVE" : 5.00,
"TEN" : 10.00,
"TWENTY" : 20.00,
"ONE HUNDRED": 100.00
}
for(let i = cid.length - 1;i>=0;i--){
var currencyName = cid[i][0];
var currencyTotal = cid[i][1];
var currencyValue = allCurrencyValues[currencyName]
//get the total number of each denomination
var currencyAmount = (currencyTotal/currencyValue).toFixed(2)
// console.log(currencyAmount)
var currencyToReturn = 0
while(changeNeeded >= currencyValue && currencyAmount > 0){
changeNeeded -= currencyValue;
changeNeeded = changeNeeded.toFixed(2)
currencyAmount--;
currencyToReturn++;
}
if(currencyToReturn > 0){
change.push(currencyName,currencyToReturn * currencyValue)
}
// return change ;console.log(change)
}
return change
}
const getRegisterStatus = (changeNeeded,totalChangeAvailable)=>{
if(changeNeeded < totalChangeAvailable){
return REGISTER_STATUS.open
}if(changeNeeded > totalChangeAvailable){
return REGISTER_STATUS.insufficientFunds
}
return REGISTER_STATUS.closed
}
const getTotalChange = (cid) =>{
var total = 0;
for(let i=0;i<cid.length;i++){
total += parseFloat(cid[i][1]);
}
return total.toFixed(2)
}
console.log(checkCashRegister(19.5, 20, [["PENNY", 0.5], ["NICKEL",
0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0],
["TWENTY", 0], ["ONE HUNDRED", 0]]));
我无法为自己的生活弄得一团糟。并且帮助将不胜感激。但是就像我说的,日志中的答案正是测试所要求的。这是指向测试沙箱FreeCodeCamp cashRegister project
的链接