你会几种实现深拷贝的方式?

496 阅读1分钟
在项目中我们会遇到一些处理比较发杂的数据,这就会用到深拷贝来处理这些数据,那么你会几种深拷贝的的方式呢?今天我带大家来写几种实现深拷贝的方式。

1、使用递归的方式实现深拷贝

 //使用递归的方式实现数组、对象的深拷贝
function deepClone1(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] = deepClone1(obj[key]);
        } else {
          objClone[key] = obj[key];
        }
      }
    }
  }
  return objClone;
}

2、通过 JSON 对象实现深拷贝

//通过js的内置对象JSON来进行数组对象的深拷贝
function deepClone2(obj) {
  var _obj = JSON.stringify(obj),
    objClone = JSON.parse(_obj);
  return objClone;
}

3、jQuery的extend方法实现深拷贝

var array = [1,2,3,4]; 
var newArray = $.extend(true,[],array);

4、jQuery的extend方法实现深拷贝

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