代码改变世界

javascript 基础 --- js 实现深拷贝的几种方式

2019-06-11 16:07  *奋斗*  阅读(183)  评论(0)    收藏  举报

1、通过 JSON.parse() 和 JSON.stringify() 实现对象的深拷贝。但对于值为 undefined 的值不进行拷贝

    //【深拷贝】JSON.parse 和 JSON.stringify 实现
    var test1 = {
      a: "aa",
      b: "bb",
      c: [
        { dd: "dd", ee: "ee" },
        { mm: "mm", nn: "nn" }
      ],
      d: null
    };
    var test2 = JSON.parse(JSON.stringify(test));  //拷贝数组,注意这行的拷贝方法
    console.log(test1);
    console.log(test2);

2、使用递归方式进行拷贝

    function deepCloneEx(obj) {
      //判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
      var objClone = Array.isArray(obj) ? [] : {};
      //进行深拷贝的不能为空,并且是对象
      if (obj && typeof obj === "object") {
        for (key in obj) {
          if (obj.hasOwnProperty(key)) {
            if (obj[key] && typeof obj[key] === "object") {
              objClone[key] = deepCloneEx(obj[key]);
            } else {
              objClone[key] = obj[key];
            }
          }
        }
      }
      return objClone;
    }

3、lodash 很热门的函数库,提供了 lodash.cloneDeep() 实现深拷贝。

4、通过 jQuery 的 extend 方法实现深拷贝也可以。