Tell us what’s happening:
I would appreciate any sort of feedback on the code I came up with down below. Tell me if there is anything I could’ve done better, ranging from complexity to the tidiness of the code. Thanks in advance!
Your code so far
function checkCashRegister(price, cash, cid) {
let total= 0;
// I multiplied everything by 100 to work around the issues that come with JS concerning floats.
let values= [["PENNY", 1],["NICKEL", 5],["DIME", 10],["QUARTER", 25],["ONE", 100],["FIVE", 500],["TEN", 1000],["TWENTY", 2000],["ONE HUNDRED", 10000]].reverse();
// availCash is just cid, but with all its values multiplied by 100 again.
let availCash = [...cid].reverse().map(el => [el[0], el[1] * 100]);
// The code down below figures out how much money the register contains in total!
for(let i=0;i<cid.length;i++){
total+=(availCash[i][1]);
}
let valueToReturn= (cash *100-price *100);
if(valueToReturn>total){
return {status: "INSUFFICIENT_FUNDS", change: []};
}
if(valueToReturn==total){
return {status: "CLOSED", change: cid};
}
// The while loop basically builds the change array if the past two tests fail.
let i=0;
let j=0;
// The variable a represents the object to return in the "OPEN" case.
let a={status: "OPEN", change: []};
while(valueToReturn>=0 && i<availCash.length){
if(valueToReturn<values[i][1] || availCash[i][1]==0){
i++;
j=0;
} else {
if(j==0){
a["change"].push([values[i][0],values[i][1]/100]);
j++;
availCash[i][1]=availCash[i][1]-values[i][1];
} else {
a["change"][a["change"].length-1][1]+=values[i][1]/100;
availCash[i][1]=availCash[i][1]-values[i][1];
}
valueToReturn=valueToReturn-values[i][1];
}
// The code down below ensures the notes available can be added up to the valueToReturn. If not, valueToReturn wouldn't be 0 even after the while loop.
}
if(valueToReturn!=0){
return {status: "INSUFFICIENT_FUNDS", change: []};
} else {
return a;
}
}
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36 OPR/88.0.4412.85
Challenge: Basic JavaScript Algorithms and Data Structures Projects -Cash Register
Link to the challenge: