Javascript 深度复制对象

标签 javascript object

<分区>

Possible Duplicate:
What is the most efficient way to clone a JavaScript object?

我有一个这样的对象:

User = {    
  name: "user",
  settings: {
    first: "1",
    second: "2"    
  }    
}

还有第二个:

user1 = {
  name: "user1",
  settings: {
    second: "3"
  }
}

现在我想将 user1 的自定义值复制到用户中,使用:

    for(var key in user1){
        User[key] = user1[key];
    }

结果用户将是:

User = {
  name: "user1",
  settings: {
    second: "3"
  }
}

User.settings 已完全替换,而我只想替换 settings.second。

如何在不知道主对象有多少子对象的情况下实现这一点?

最佳答案

我发现最好的方法是:

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];
            }
        }
    };

关于Javascript 深度复制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11299284/

相关文章:

Ruby:使用字符串动态创建对象

Typescript:如何用全名填充对象属性

javascript - 如何在 Google Maps V3 上居中和缩放多个标记

javascript - 如果不是未定义的,如何从多个对象中删除属性?

javascript - Node-MSSQL 查询事务

javascript - 使用 JS 客户端使 Google Drive 的访问 token 失效

javascript - 在 jQuery UI Draggable 中延迟后启动拖动而无需移动鼠标?

java - 如何在 Java 中动态命名对象?

javascript - 实例化对象时设置唯一标识(使用构造函数)

javascript - 关于对象内部 const 声明的困惑