如何对一个对象进行深拷贝

如何对一个对象进行深拷贝,请用代码实现

求大神指点

阅读 3.7k
7 个回答
var aa = {}

// 浅拷贝
var bb = aa

// 深拷贝
var cc = JSON.parse(JSON.stringify(aa))
function clone(obj) {
  let result = null;
  if(typeof obj === 'object' && obj !== null) {
    result = obj instanceof Array ? [] : {};
    for(let v in obj) {
      result[v] = clone(obj[v])
    }
  }else {
    result = obj
  }
  return result;
}

说下原理吧。

  1. 编写一个拷贝函数
  2. 遍历对象
  3. 判断值是非空的objectnull也是object,递归调用拷贝函数

一般情况 JSON.parse(JSON.stringify(obj))够用
不够的话 使用lodash的cloneDeep方法

生产环境下尽量不要自己实现吧。
如果想自己琢磨一下,那可以写写看。
需要注意的点特别多,对逻辑严密性要求很高。
一般要考虑,特殊值拷贝(比如null, undefined, 空白元素列表等)、引用关系保留、循环引用、如果用递归会不会爆栈等等。

面试的话就老老实实写便利
开发中的话
let newObj = Object.assgin({},oldObj)
或者
let newObj = JSON.parse(JSON.stringfy(oldObj))

推荐问题
宣传栏