JS: Clone, Deep Copy Object/Array
Deep Copy
Here's the best way to clone (deep copy) a object. Object can be type Array or Object.
// deep copy/clone a object // 2017-01-30 this is the best way. fastest too const xah_deep_copy_array_or_object = (obj => JSON.parse ( JSON.stringify(obj) ) ); // test let obj1 = { "k1":1, "k2":2, }; let obj2 = { "k3":3, "k4":4, "k5":obj1 }; console.log ( obj2 ); // { k3: 3, k4: 4, k5: { k1: 1, k2: 2 } } console.log ( xah_deep_copy_array_or_object( obj2 ) ); // { k3: 3, k4: 4, k5: { k1: 1, k2: 2 } }
[see JS: JSON]
Shallow Copy
For shallow copy, use the slice
method with no argument.
This is same as clone if your array does not contain elements that are references (that is, other array or objects.).
const oldArray = [3,4,5]; // shallow copy const newArray = oldArray.slice();
[see JS: Array.prototype.slice]
What's the Difference Between Deep Copy and Shallow Copy?
Shallow copy copies by reference of nested elements. This means, if you have shallow copy, changing a nested object may also change your copy.
// shallow copy isn't true clone const mm = [8]; const aa = [3,mm]; // shallow copy const bb = aa.slice(); mm[0] = 4; // both are changed console.log(aa); // [ 3, [ 4 ] ] console.log(bb); // [ 3, [ 4 ] ]
Array Topic
Object and Inheritance Topic
- JS: Object Overview
- JS: Object Type
- JS: Prototype and Inheritance
- JS: Create Object
- JS: Object Literal Expression
- JS: Get/Set Prototype
- JS: Create Object with Parent X
- JS: Prevent Adding Property
- JS: Determine Type of Object
- JS: Clone, Deep Copy Object/Array
- JS: Test Equality of Objects
- JS: Object Object
- JS: Object.prototype
Patreon me $5. Ask me question on patreon