Js 深度拷贝实现(deepCopy)

实现1:

copy = JSON.parse(JSON.stringify(obj))

由于JSON并不是支持所有js数据类型(如:Date,Function,Error,RegExp等都不支持),这种拷贝方式对于数据结构中包含这些类型的都会忽略。

实现2:

function deepCopy(obj){
  if(typeof obj != 'object' || obj === null){
    return obj
  }
  
  var copy = Array.isArray(obj) ? [] : {}
  for(key in obj){
    copy[key] = deepCopy(obj[key])
  }
  return copy
}

上面处理方式的思路是,只有数组和对象需要进行深拷贝。根据类型分开处理。
这种方式也并不完美,有些特殊的数据结构,如环状结构(有键值对指向上级对象)使用此代码会因为递归无法终止而造成栈溢出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容