The Cash Register Project Array Mutation Problem

Tell us what’s happening:

Hey fellas! i am in the last challenge to end the data structures and algorithms section , but i got a weird problem
my solution for the cash register project consists of making a clone for the Cid array called “original” , and i enter a for loop that will iterate through the cid array and mutate it if it necessarily.
then when i quit the loop i will compare between the “cid” and the original cid array called “original”
the problem is that “original” is mutated too and it became a clone of cid so i cant compare and get the change.

i dont understand why i got this problem
and thanks for help!

Your code so far


var currency = {
  "Penny" : 0.01,
  "NICKEL" : 0.05,
  "DIME" : 0.1,
  "Quarter":0.25,
  "ONE":1,
  "FIVE": 5,
  "TEN": 10,
  "TWENTY": 20,
  "ONE HUNDREAD":100
}
function checkCashRegister(price, cash, cid) {

var change =0;
var rest = cash - price;

      
   var original = cid.slice(0);
   console.log("cid clone before the loops");
    console.log(original);

for(var i= cid.length-1;i>=0 && change<rest;i--){
  while(cid[i][1]!=0 && change<rest && change+currency[cid[i][0]]<= rest ){
            change+=currency[cid[i][0]];
            cid[i][1]= cid[i][1]-  currency[cid[i][0]];  
        
  }
}

console.log("cid clone after the loops ");
    console.log(original);

    console.log(change);
    change = original.filter((v,i)=>v[1]!=original[i][1]);
    console.log("change");
    console.log(change);

}

checkCashRegister(19.5, 20, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 Edg/84.0.522.40.

Challenge: Cash Register

Link to the challenge:

Idk what exactly are the exercise requirements but if you google: copy array in python (not cloning) you’ll found out.

For example:

my_list = ['cat', 0, 6.7]
new_list = my_list.copy()

in this case new_list and my_list are independent.

you are correctly making a copy of the outer array, but you have copied a reference to all of the inner arrays

to copy you need to cooy both the outer and the inner array
something like
copy = arr.map(subarr => subarr.slice())

1 Like

I dont understand what do you mean ?

this doesn’t make a copy because your array is multidimemsional

you need to make a copy also of the inner arrays, above I showed a way

1 Like