美文网首页
Js 深度拷贝实现(deepCopy)

Js 深度拷贝实现(deepCopy)

作者: stanf1l | 来源:发表于2019-04-01 15:14 被阅读0次

实现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
}

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

相关文章

  • Js 深度拷贝实现(deepCopy)

    实现1: 由于JSON并不是支持所有js数据类型(如:Date,Function,Error,RegExp等都不支...

  • 2021-05-29 复杂数据类型深拷贝

    export function deepCopy(obj) { //深拷贝return JSON.parse(JS...

  • js 浅拷贝和深拷贝

    js实现深拷贝(深度克隆)[https://www.cnblogs.com/cirry/p/13395291.ht...

  • 深拷贝、浅拷贝

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

  • 面试题整理

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

  • iOS面试基础一

    #父类实现深拷贝时,子类如何实现深度拷贝.父类没有实现深拷贝时,子类如何实现深度拷贝.# <(1)深拷贝同浅拷贝的...

  • JS实现DeepCopy

    为什么需要DeepCopy: 在JS里,除Array和Object之外的数据类型的复制可以直接通过等号=来实现,但...

  • 0. iOS面试题基础篇

    1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...

  • iOS基础知识点01

    1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...

  • iOS知识点(一)

    1.1 父类实现深拷贝时,子类如何实现深度拷贝。 父类没有实现深拷贝时,子类如何实现深度拷贝。深拷贝同浅拷贝的区别...

网友评论

      本文标题:Js 深度拷贝实现(deepCopy)

      本文链接:https://www.haomeiwen.com/subject/slsvbqtx.html