美文网首页
浅谈深拷贝

浅谈深拷贝

作者: Michael113c | 来源:发表于2020-08-16 10:27 被阅读0次

1.JSON方法实现

//_tmp和result是相互独立的,没有任何联系,有各自的存储空间。
let deepClone = function (obj) {
    let _tmp = JSON.stringify(obj);//将对象转换为json字符串形式
    let result = JSON.parse(_tmp);//将转换而来的字符串转换为原生js对象
    return result;
};

let obj1 = {
    mike: {
        age: 20,
        class: 1502
    },
    bob: {
        age: 21,
        class: 1501
    }
};

let test = deepClone(obj1);
console.log(test);

undefined、function、symbol 会在转换过程中被忽略

If undefined, a function, or a symbol is encountered during conversion it is either omitted (when it is found in an object) or censored to null (when it is found in an array). JSON.stringify can also just return undefined when passing in "pure" values like JSON.stringify(function(){}) or JSON.stringify(undefined).

2.for…in实现遍历和复制

function deepClone(source){
  const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象
  for(let keys in source){ // 遍历目标
    if(source.hasOwnProperty(keys)){
      if(source[keys] && typeof source[keys] === 'object'){ // 如果值是对象,就递归一下
        targetObj[keys] = source[keys].constructor === Array ? [] : {};
        targetObj[keys] = deepClone(source[keys]);
      }else{ // 如果不是,就直接赋值
        targetObj[keys] = source[keys];
      }
    } 
  }
  return targetObj;
}

3.用数组的Array.prototype.forEach进copy

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

    });
    return copy;
};

let testObj = {
    name: "weiqiujuan",
    sex: "girl",
    age: 22,
    favorite: "play",
    family: {brother: "wei", mother: "haha", father: "heihei"}
}
let testRes2 = deepClone(testObj);
console.log(testRes2);

相关文章

  • 深拷贝和浅拷贝

    1: iOS开发 深拷贝与浅拷贝 2: iOS 浅谈:深.浅拷贝与copy.strong 3: iOS开发——深...

  • copy和mutablecopy

    Objective-C中的浅拷贝和深拷贝 - CocoaChina_让移动开发更简单 iOS 浅谈:深.浅拷贝与c...

  • 浅谈深拷贝

    1.JSON方法实现 undefined、function、symbol 会在转换过程中被忽略 If undefi...

  • 浅谈深拷贝、浅拷贝

    深拷贝:对象和内存地址均发生改变浅拷贝:只是单纯地拷贝指针。其地址快并没有发生任何改变 NSString copy...

  • 浅谈JavaScript深拷贝

    前言 JavaScript的浅拷贝、深拷贝是一个老生常谈的话题,真正完美的深拷贝其实是比较困难的,但相对的能应用的...

  • 浅谈 Java 浅拷贝&深拷贝

    深拷贝和浅拷贝的概念,我自己在学习Java的时候也没注意,虽然Java中对象回收工作由GC帮我们做了,但在码代码时...

  • 浅谈JS浅拷贝&深拷贝

    深拷贝 方案一 : 方案二:用JSON.stringify转为字符串 再用JSON.parse把字符串再转为新的对...

  • 浅谈JS深拷贝(深克隆)

    在学习深拷贝之前,我们要先搞明白什么是深拷贝? 在JS中,数据类型分为基本数据类型和引用数据类型两种,对于基本数据...

  • 浅谈java浅拷贝与深拷贝

    java实现拷贝最直观的做法用object类中的clone()方法,而想要使用该方法进行对象的克隆只要实现clon...

  • 对象深拷贝和浅拷贝

    浅拷贝 深拷贝 深拷贝的递归方法 深拷贝的JSON方法

网友评论

      本文标题:浅谈深拷贝

      本文链接:https://www.haomeiwen.com/subject/hkltjktx.html