# JavaScript Algorithms and Data Structures Projects: Cash Register Feedback

Hello,

I have completed Cash Register assignment from the JavaScript Algorithms and Data Structures certification program and it works for all testing scenarios right now. I looked further more into the original code that I wrote with 120 lines and was able to refactor it to less than 70 lines. Could please look into my code and possibly provide feedback and suggest how I could modify my code further?

Thank you very much,
Best regards,
Konstantin

``````function checkCashRegister(price, cash, cid) {
let tempCid = [...cid.reverse()];
let change = cash - price;
let totalValueCID = 0;
for (let i=0; i < cid.length; i++) {
totalValueCID += cid[i];
}

let status = "";

if (change == totalValueCID) {
let status = "CLOSED";
return {"status" : status, "change" : cid.reverse()};
}

let changeToReturn = [["ONE HUNDRED", 0.00], ["TWENTY", 0.00], ["TEN", 0.00], ["FIVE", 0.00], ["ONE", 0.00], ["QUARTER", 0.00], ["DIME", 0.00], ["NICKEL", 0.00], ["PENNY", 0.00]];
// Assign parameters' values to new variables that are updated in the following calculations w/o changing initial arguments
let remainingChange = change;
let remainingCid = [...tempCid];

function calculateChange (value, cidSubArr) {
while (remainingChange >= value && remainingCid[cidSubArr] >= value) {
changeToReturn[cidSubArr] += value;
remainingCid[cidSubArr] -= value;
remainingChange -= value;
}
}

let denominations = [100, 20, 10, 5, 1, 0.25, 0.10, 0.05, 0.01];

for (let j=0; j < cid.length-1; j++) {
calculateChange(denominations[j], j);
if (remainingCid[j] < denominations[j] || remainingChange < denominations[j]) {
calculateChange(denominations[j+1], j+1);
}
}
// Exceptions (calculations for pennies following different pattern from the rest for rounding purposes)
if (remainingCid < 0.05 || remainingChange < 0.05) {
while (remainingChange > 0.00 && remainingCid >= 0.01) {
changeToReturn += 0.01;
remainingCid -= 0.01;
remainingChange -= 0.01;
}
}
if (remainingChange < 0.01 && remainingCid > 0.00 && remainingCid < 0.01) {
changeToReturn += 0.01;
remainingCid = 0.00;
remainingChange = 0.00;
}

let finalChangeToReturn = [];
for (let k=0; k < changeToReturn.length; k++) {
if (changeToReturn[k] != 0.00) {
let changeItem  = [];
changeItem.push(changeToReturn[k]);
changeItem.push(Math.round(changeToReturn[k] * 100) / 100);
finalChangeToReturn.push(changeItem);
}
}

if (remainingChange > 0) {
status = "INSUFFICIENT_FUNDS";
finalChangeToReturn = [];
return {"status" : status, "change" : finalChangeToReturn};
} else {
status = "OPEN";
return {"status" : status, "change" : finalChangeToReturn};
}
}
``````