I have an object like this:
User = {
name: "user",
settings: {
first: "1",
second: "2"
}
}
and a second one:
user1 = {
name: "user1",
settings: {
second: "3"
}
}
now I want to copy user1's custom values into User, using:
for(var key in user1){
User[key] = user1[key];
}
the result User will be:
User = {
name: "user1",
settings: {
second: "3"
}
}
User.settings has been entirely replace while I wanted only settings.second to be replaced.
How to achieve this, without knowing how much child object the main object have?
Answer
I've found that the best way to go is this:
http://andrewdupont.net/2009/08/28/deep-extending-objects-in-javascript/
Object.deepExtend = function(destination, source) {
for (var property in source) {
if (typeof source[property] === "object" &&
source[property] !== null ) {
destination[property] = destination[property] || {};
arguments.callee(destination[property], source[property]);
} else {
destination[property] = source[property];
}
}
return destination;
};
Object.extend(destination, source);
What about this?
function clone(destination, source) {
for (var property in source) {
if (typeof source[property] === "object" && source[property] !== null && destination[property]) {
clone(destination[property], source[property]);
} else {
destination[property] = source[property];
}
}
};
No comments:
Post a Comment