Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
72
rated 0 times [  78] [ 6]  / answers: 1 / hits: 36325  / 13 Years ago, tue, november 1, 2011, 12:00:00

I am confused. I create a copy from myObjOne, than i delete an entry from myObjOne and JS delete the entry in my copy(myObjTwo) too? But why?



  myObjOne = {};
myObjOne['name'] = 'xxx';
myObjOne['id'] = 'yyy';
myObjOne['plz'] = 'zzz';

// clone
myObjTwo = myObjOne;

// remove something
delete myObjOne['name'];

console.dir(myObjTwo);


example
http://jsbin.com/itixes/edit#javascript,html


More From » copy

 Answers
97

Update: Removing Object.create as a method of cloning as indicated in comments.



  myObjTwo = myObjOne;


does not clone. It simply copies the reference.



If you want to clone, you can use JSON.parse and JSON.stringify



var x = {a:{b:{c:{'d':'e'}}}};
var y = JSON.parse(JSON.stringify(x)); //y is a clone of x
console.log(y.a.b.c.d); //prints e
console.log(y === x); //prints false


Warning: As Raynos mentioned in comments, this JSON based clone does not retain methods of the input object in the output object. This solution is good enough if your object does not contain any methods. Methods are properties of a object that are functions. If var obj = {add : function(a,b){return a+b;}} then add is a method of obj.



If you need a solution that supports copying of methods, then go through these SO answers (as pointed out by musefan, Matt and Ranhiru Cooray)





I would suggest How do I correctly clone a JavaScript object?


[#89347] Saturday, October 29, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
keric

Total Points: 572
Total Questions: 93
Total Answers: 97

Location: Cyprus
Member since Mon, Oct 24, 2022
2 Years ago
;