深拷贝

深拷贝的方法

1.json方式

var eeee= {
    xiaoming: {
        age: 20,
        green: 150
    },
    xiaohong: {
        age: 21,
        green: 250
    }
};

    let yyk= JSON.stringify(eeee);//转换为json字符串形式
    let result = JSON.parse(yyk);//转换为js对象

    eeee.xiaoming.age=21
    console.log(eeee.xiaoming.age);
    console.log(result.xiaoming.age);
    //两个不相等

2.运用for...in,递归方法进行深度拷贝

 //1 .原生的方法写深度拷贝
      function deepClone(obj) {
        // 先判断是数组还是对象
        var params = Array.isArray(obj) ? [] : {};
        for (key in obj) {
          if (obj[key] && typeof obj[key] == "object") {
            params[key] = deepClone(obj[key]);
          } else {
            params[key] = obj[key];
          }
        }
        return params;
      }

      var one = {
        name: "hhhhh",
        obj: {
          title: "zzz"
        },
      };

      var two = deepClone(one);
      one.obj.title= "哈哈";
      console.log(one);
      console.log(two);   

3.第三方插件Lodash实现深拷贝(方便)

 <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
    var a = {
        name: "我是a中的数据",
        obj: {
          name: "张三",
          age: "40",
        },
      };
      var b = _.cloneDeep(a, {
        obj: {
          name: "李四",
          age: "50",
          sex: "男",
        },
      });
      a.obj.name = "王二";
      console.log(a);
      console.log(b);

4.利用数组的Array.prototype.forEach进copy 

var deepClone = function (obj) {
    let caa = Object.create(Object.getPrototypeOf(obj));
    let propNames = Object.getOwnPropertyNames(obj);
    propNames.forEach(function (items) {
        let item = Object.getOwnPropertyDescriptor(obj, items);
        Object.defineProperty(caa, items, item);
    });
    return copy;
};

var aaaaa = {
    name: "kkk",
    age: 22,
    family: {mother: "kok", father: "kokdd"}
}
let bbb= deepClone(aaaaa);
console.log(bbb);

 

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值