可能重复: 克隆JavaScript对象的最有效方法是什么?
我有一个这样的物体:
User = {
name: "user",
settings: {
first: "1",
second: "2"
}
}还有第二个:
user1 = {
name: "user1",
settings: {
second: "3"
}
}现在,我希望将User 1的自定义值复制到用户中,使用:
for(var key in user1){
User[key] = user1[key];
}结果用户将是:
User = {
name: "user1",
settings: {
second: "3"
}
}User.settings已经完全被替换了,而我只想替换settings.second。
如何实现这一点,而不知道主对象有多少子对象?
发布于 2012-07-03 12:45:15
我发现最好的方法是:
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);那这个呢?
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];
}
}
};发布于 2012-07-03 00:41:13
获取jQuery的扩展方法,并使其与库无关。
它封装在扩展构造函数中,所以每次调用extend方法时都不必实例化它的所有内部方法。
免责声明:我还没有对此进行广泛的测试。它基本上是jQuery的extend()的1:1克隆,但是您的里程可能会有所不同。
像这样用它。
var user1 = {
name: "user1",
settings: {
first: "1",
second: {bar: 'foo'}
}
};
var user2 = {
name: "user2",
settings: {
second: {foo:'bar'}
}
};
/* merge user1 into User */
__extend(true, user1, user2);
// Modifies the User object
user1.settings.second.foo == 'bar'; // true
// note, you can do assignment too.
var newUser = __extend(true, user1, user2);有关更多文档,请参见这里。
发布于 2012-07-02 19:20:00
这真是太麻烦了,但这应该管用。我建议按照其他用户在评论中的建议去做;找到一个预先存在的库来帮助您这样做。
for(var key in user1){
var temp = User[key]
User[key] = user1[key];
for(var key1 in temp){
if(User[key][key1] == null){
User[key][key1] = temp[key1];
}
}
}https://stackoverflow.com/questions/11299284
复制相似问题