# Cash Register - JS Exercise: please Feedback My Code Solution

The exercise is: Cash Register

``````function moneyValueToName(value){
switch(value){
case 0.01:	return "PENNY";
case 0.05:	return "NICKEL";
case 0.10:	return "DIME";
case 0.25:	return "QUARTER";
case 1:		return "ONE";
case 5:		return "FIVE";
case 10:	return "TEN";
case 20:	return "TWENTY";
case 100:	return "ONE HUNDRED";
default: return undefined;
}
}

function checkCashRegister(price, cash, cid) {
let change = {};
let drawer = Object.fromEntries(cid) //crete Object from cid
let totalReturnChange = cash-price;

/* Array used to find minimun cash value */
let money = [100, 20, 10, 5, 1, 0.25, 0.10, 0.05, 0.01];
var retObj = {};

while(totalReturnChange > 0 ){
let minMoney = money.find(element => element <= totalReturnChange); //find minimun cash value
if(minMoney === undefined){
break; //exit from while because there isn't a minimun cash value
}

let moneyName = moneyValueToName(minMoney);

if(drawer.hasOwnProperty(moneyName) && drawer[moneyName] > 0){
drawer[moneyName] = (drawer[moneyName]).toFixed(2) - minMoney;
totalReturnChange = (totalReturnChange - minMoney).toFixed(2);

if(drawer[moneyName] === 0)
money.splice(money.indexOf(minMoney), 1); //remove from money the element that have value 0 in drawer

if(change.hasOwnProperty(moneyName))
change[moneyName] = parseFloat((Number(change[moneyName]) + minMoney).toFixed(2)); //convert in float the value width 2 decimal
else
change[moneyName] = minMoney;
}
else {
if(drawer[moneyName] === 0)
money.splice(money.indexOf(minMoney), 1);
}
}

const changeValues = Object.values(change);
let totalValues = 0;
changeValues.forEach(el => totalValues += el);

if (totalValues < totalReturnChange)
retObj = {status: "INSUFFICIENT_FUNDS", change: []};
else{
let allZeroValues = Object.values(drawer).every(el => el === 0);
if(allZeroValues){
retObj.status = "CLOSED";

for (const property in change) {
drawer[property] = change[property];
}

retObj.change = Object.entries(drawer);
}
else{
retObj.status = "OPEN";
retObj.change = Object.entries(change);
}
}

return retObj;
}
``````

Thanks and good code at all.
Luca

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.