I want to form an array from an existing array so I can modify the new array without affecting the old. I realise arrays are mutable and this is why the new array affects the old.
E.g.
old = ["Apples", "Bananas"]; new = old; new.reverse();
Old has also been reversed.
In Python, I can just do new = list(old)
, but doing new = new Array(old);
puts the old list inside a list.
An array in JavaScript is also an object and variables only hold a reference to an object, not the object itself. Thus both variables have a reference to the same object.
Array Clone – Shallow Copy In Java, to create clone of array, you should use clone() method of array. It creates a shallow copy of array. Cloning always creates shallow copy of array. Any change (in original array) will be reflected in cloned array as well.
You can use the .slice
method:
var old = ["Apples", "Bananas"]; var newArr = old.slice(0); newArr.reverse(); // now newArr is ["Bananas", "Apples"] and old is ["Apples", "Bananas"]
Array.prototype.slice returns a shallow copy of a portion of an array. Giving it 0 as the first parameter means you are returning a copy of all the elements (starting at index 0 that is)
Try the following
newArray = oldArray.slice(0);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With