美文网首页
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)

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