深拷贝js

JSON

最简单的一个

   let obj = {}
   let newObj = JSON.parse(JSON.stringify(obj))

弊端:这种方法无法拷贝function函数,undefined,Date,Reg,Set,Map等

递归拷贝obj

function DeepClone(obj) {
    var Map1 = new Map()
    function deepClone(obj) {
      var objClone = Array.isArray(obj) ? [] : {}
      if (obj && typeof obj === "object") {
        for (let key in obj) {
          if (obj.hasOwnProperty(key) ) {
            if (obj[key] && typeof obj[key] === "object" && !Map1.has(obj[key])) {
				  Map1.set(obj[key], obj[key])
         		 console.log(Map1)
              objClone[key] = deepClone(obj[key]);
            } else {

              objClone[key] = obj[key];
            }
          }
        }
      }
      return objClone;
    }
    return deepClone(obj)
}

该方法解决了循环引用爆栈的问题,如果考虑想更全面,建议参考lodash的deepClone
(博客园编辑页徒手写的,可能会有bug。不过整体思路就是这样,有bug可以自己小改一下)

posted on 2019-05-08 09:25  ouruixi  阅读(234)  评论(0编辑  收藏  举报

导航