怎么实现深拷贝

作者: 奕玄 | 来源:发表于2018-10-27 20:53 被阅读0次
  1. 注意点
  • 进行拷贝操作时,须加以区分引用类型和基本数据类型的值,且拷贝引用类型的值时,不是简简单单的复制其保存在栈中的指针,(即浅拷贝)而是应该复制其存储在堆中的数据。
  1. 解题思路
    (1)方法一:分别对数组、对象、基本数据类型值进行判断、考虑,使用递归的方式复制值
    (2)方法二:利用了 JSON.parse()JSON.stringify() 这两个方法实现深拷贝

  2. 代码

/* 方法一 */
function deepClone (val) {
  var res;
  if (val && Array.isArray(val)) {
    res = [];
    val.forEach(function (item) {
      res.push(deepClone(item));
    });
  } else if (typeof val === 'object' && val !== null) {
    res = {};
    for (let key of Object.keys(val)) {
      res[key] = deepClone(val[key]);
    }
  } else {
    res = val;
  }
  return res;
}

/* 方法二 */
function deepClone (val) {
  if (typeof val === 'undefined') {
    return;
  }
  var temp = JSON.stringify(val);
  return JSON.parse(temp);
}

/* 测试代码 */
// 深拷贝基本数据类型值
var val = 'hello world';
console.log('基本数据类型值', deepClone(val));
// 深拷贝数组
var arr = [9, 'cat', true, null, undefined, [1, 2], {foo: 'bar'}];
console.log('数组', deepClone(arr));
// 深拷贝对象
var obj = {
  name: 'wang',
  age: 18,
  isStudent: true,
  nums: [3, 4],
  score: {
    math: 95
  }
};
console.log('对象', deepClone(obj));

相关文章

  • iOS基础知识点(网络摘抄)

    1.父类实现深拷贝时,子类如何实现深拷贝。父类没有实现深拷贝时,子类如何实现深拷贝? 深拷贝同浅拷贝的区别:...

  • 深拷贝、浅拷贝

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

  • 面试题整理

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

  • iOS面试基础一

    #父类实现深拷贝时,子类如何实现深度拷贝.父类没有实现深拷贝时,子类如何实现深度拷贝.# <(1)深拷贝同浅拷贝的...

  • 0. iOS面试题基础篇

    1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...

  • iOS基础知识点01

    1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...

  • iOS知识点(一)

    1.1 父类实现深拷贝时,子类如何实现深度拷贝。 父类没有实现深拷贝时,子类如何实现深度拷贝。深拷贝同浅拷贝的区别...

  • 面试 (一) : 基础篇

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。• 深拷贝同浅拷贝的区别:浅拷...

  • 基础

    1、父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅...

  • 常见的面试(一)

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。• 深拷贝同浅拷贝的区别:浅拷...

网友评论

    本文标题:怎么实现深拷贝

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