JS如何实现深度拷贝(克隆)

深拷贝(深度克隆)的特点:
拷贝的时候生成新数据,修改拷贝以后的数据不会影响原数据。
拷贝的数据里如果有对象或者数组,那么要继续遍历进行拷贝,除非该数据是数值类型,否则一直遍历进行拷贝。
先判断数据类型---获取最终当前的数据的类型到底是什么类型,才能够进行是否要遍历

// Array Object 
let test=[];
console.log(Object.prototype.toString.call(test))  //[object Array]
let obj = {};
console.log(Object.prototype.toString.call(obj))  //[object Object]

// 根据得到的类型,判断是不是Object,判断是不是Array,如果都不是,直接复制即可
// 得到的是数据的类型
function targetType(target) {
    return Object.prototype.toString.call(target).slice(8, -1)
}
// 如果数据是Object或者是Array 都要遍历,找到里面的每个数据是不是Object/Array,然后是否要继续遍历

function clone(target) {
  // 进行克隆
  let result, checkType = targetType(target); // 获取当前数据的类型的
  // 判断
  if (checkType === 'Object') {
    result = {}
  } else if (checkType === 'Array') {
    result = []
  } else {
    return result
}

// 遍历进行克隆
for (let i in target) {
  let value = target[i]
  if (targetType(value) === 'Object' || targetType(value) === 'Array') {
    result[i] = clone(value)
  } else {
    result[i] = value
  }
}
// 最终把克隆后的数据要返回
return result;
}

// 深拷贝
let arr = [1, 2, [10, 20], { name: '小明', age: 100 }];
let result = clone(arr);
result[3]['name'] = '酷酷姐';
console.log(arr);
console.log(result);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容