传递FreeCodeCamp CashRegister挑战时出错

时间:2019-03-08 21:17:06

标签: javascript arrays object

我一直未能通过测试,要求输出是具有状态键和更改之一的对象。更改值必须是包含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

的链接

0 个答案:

没有答案