拷贝

利用递归遍历

先看个例子

<script>
     var data = [{
          id:1,
          name:'家电’,
          goods:[{
              id:11,
              name:冰箱;
          },{
              id:12,
                name:'洗衣机‘;
                }]
            },{
              id:2,
              name:'服饰'
              }] ;
        //想要输入id号,就可以返回不同的数据对象
        //1.利用forEach去遍历里面的每一个对象
      
        function getID(json,id) {
          var o= {}
              json.forEach(function(item){
                     if(item.id == id) {
                         //console.log(item);
                         o = item;
                         //2.想要里层的11,12可以利用递归函数
                         //里面有数组且数组的长度不为0;
                     }else if (item.goods && item.goods.length > 0){
                            o = getID(item.goods,id);
                    
                            }
                      return o;
          })
          }
        getID(date,1);
        </script>

浅拷贝和深拷贝

  • 浅拷贝只是拷贝一层,更深层次的对象级别的只拷贝引用;
  • 深拷贝拷贝多层,每一级别的数据都会被拷贝
  • Object.assign(target,…sources)可浅拷贝
  var object= {
     id:1;
     name='小楠楠’;
     msg {
         age:18
         }
     };
     var o = {};
     for (var k in obj) {
         //k是属性名,obj[k]属性值
         o[k] = obj[k];
         }
     console.log(o);
     //会覆盖
     o.msg.age = 20;
     console.log(obj);//20

//换个新方法
Object.assign(o,object);
console.log(0);

     
         

在这里插入图片描述
o和obj里面的msg指向的是同一个地址,如果修改o里面的msg就会影响obj里面的msg

深拷贝

在这里插入图片描述
深拷贝是把obj开辟的一个空间拷贝一份,在把拷贝完的这个给o,形成两个互不干扰的空间。

   var object= {
      id:1;
      name='小楠楠’;
      msg {
          age:18
          }
      };
      var o = {};
      //要实现的话考虑函数递归
      //让我们封装一个函数吧
      funtion deepCopy(newobj,oldobj) {
            for (var k in object){
            //判断属性值属于那种类型的数据
            //1.获取属性值 oldobject[k]
               var item = object[k];
               //2.判断是否属于数组
               if (item instanceof Array) {
                 newobject[k] = [];//等价于o.color = []; 
                 deepCopy(newobj[k],item);//把属性值给属性名         
                      }else if (item instanceof Object){
                      //3.判断这个值是否属于对象
                      newobj[k] = {};
                      deepcopy(newobj[k],item);
                          }else if {
                                  newobj[k]=item;
                      }
                    }
                 }
             deepCopy(o,obj);
             console.log(o);

这里的递归函数在传递参数的时候,是把值item给属性newobj[k],另外数组要写在oject上面,因为数组也属于object

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值