美文网首页
js简单深拷贝

js简单深拷贝

作者: 唯恶唯玩 | 来源:发表于2021-11-18 17:00 被阅读0次

    思路:1递归子元素,子元素传入函数,基本数据类型不用递归直接返回,{}和[]需要遍历

     const data = [[[{ a: 'b' }]],  { a:[1,2,null,undefined,/a/] ,b(){} ,c:'111'}  ]
    
      function myTypeofArrayOrObject(tt) {//判断数据是否为{}和[]
        let flagBoolean = (Object.prototype.toString.call(tt) === '[object Object]' || 
                            Object.prototype.toString.call(tt) === '[object Array]')
        return flagBoolean
      }
      function myClone(oldData) {
        let newData;
        if (myTypeofArrayOrObject(oldData)) {
          newData = Array.isArray(oldData) ? [] : {}
          for (let i in oldData) {
            newData[i]=myClone(oldData[i])
          }
        } else {
          newData = oldData
        }
        return newData
      }
      let newData=myClone(data)
      data[0][0][0].a=1;//改值
      data[1].a[0]='aaaa'
      console.log(data ,newData)
    

    效果


    screenshot_20211118_155121.jpg
    缺点:  1.for...in 性能不好
            2.引用变量不行。
            const arr=['单身狗'];
            var str= '鹅';
            const data = [[[{ a: 'b' }]],{a:[1,2,null,undefined,/a/],b(){},c:'111'},arr,str]
            let newData=myClone(data)
            arr[3]='老王';
            arr.push('猫');  
            str='村霸';
          console.log(data ,newData)
            就很迷,引用数据类型的子元素改动一个变一个不变,这个好理解
        变量两边都改不动,就很迷,估计数组引用变量和变量复制变量一样。
            3.菜鸡一个,不知道还有问题没,也不知道错了没,欢迎批评
    
    screenshot_20211118_163719.jpg

    相关文章

      网友评论

          本文标题:js简单深拷贝

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