手写一个深拷贝(深克隆)
1. 首先使用JSON.parse来实现一个深拷贝
let test = { x : 1, y : 2, z : { a : 4, b : 5 } } // 深拷贝 let result = JSON.parse(JSON.stringify(test)); // 改变拷贝后的值 result.z.a = 40; console.log(test); console.log(result);
function deepClone(obj){ let cloneObj; // 判断当输入的数据是简单数据类型时,直接复制 if(obj && typeof obj !== 'object'){ cloneObj = obj; } // 当输入的数据是对象或者数组时 else if(obj && typeof obj === 'object'){ // 检测输入的数据是数组还是对象 cloneObj = Array.isArray(obj) ? [] : {}; // 变量数据对象 for(let key in obj){ // 判断对象是否存在key属性 if(obj.hasOwnProperty(key)){ if(obj[key] && typeof obj[key] === 'object'){ // 若当前元素类型为对象时,递归调用 cloneObj[key] = deepClone(obj[key]); } // 若当前元素类型为基本数据类型 else{ cloneObj[key] = obj[key]; } } } } return cloneObj; } // 测试用例 deepClone({ x: 1, y: [ 5, 6, 7 ], z: { a: 0, b: 1 } })
测试发现两种效果是一样的,深拷贝完成。
作者:学辉
-------------------------------------------
个性签名: 没有好看的皮囊,但有有趣的灵魂,技术没有止境!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!