【JavaScript】深拷贝

深浅拷贝复杂数据类型(引用数据类型),简单数据类型(基本数据类型)没有深浅的说法

1、Object.assign()

如果对象的属性值为简单数据类型(string,number),为深拷贝;如果属性值为复杂数据类型就是浅拷贝的,因为只拷贝了复杂数据类型的引用地址。

2、JSON.stringify 和 JSON.parse

function deepClone(obj) {
  let obj1 = JSON.stringify(obj);
  let oClone = JSON.parse(obj1);

  return oClone;
}

3、jQuery extend方法

let obj = {
   a: {
     b: {
       c: {}
     }
   }
};
let obj1 = $.extend(true, {}, obj);

4、lodash.cloneDeep()

let lodash = require('lodash');
let obj1 = {
    a: 1,
    b: { f: { g: 1 } },
    c: [1, 2, 3]
};
let obj2 = lodash.cloneDeep(obj1);

5、递归的实现深拷贝

function deepClone(obj) {
  let target;
  if (typeof source === 'object') {
    target = Array.isArray(obj) ? [] : {};
    for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
        if (typeof obj[key] !== 'object') {
          target[key] = obj[key];
        } else {
          target[key] = deepClone(obj[key]);
        }
      }
    }
  } else {
    target = obj;
  }
  return target;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容