项目中经常会遇到需要深拷贝数据的场景,之前用递归来实现深拷贝
function deepClone(data){
var type = getType(data);
var obj;
if(type === 'array'){
obj = [];
} else if(type === 'object'){
obj = {};
} else {
//不再具有下一层次
return data;
}
if(type === 'array'){
for(var i = 0, len = data.length; i < len; i++){
obj.push(deepClone(data[i]));
}
} else if(type === 'object'){
for(var key in data){
obj[key] = deepClone(data[key]);
}
}
return obj;
}
但是,我们有没有更简单的办法,可以试试字符串的JSON.stringify(),然后再JSON.parse()
但是当查看打印结果时,问题出现了
看来这样处理是存在弊端的,继续寻找好的方法
const deepClone = (obj) => {
let proto=Object.getPrototypeOf(obj)
return Object.assign({},Object.create(proto),obj)
}
console.log(deepClone(obj))
打印结果如下
结果符合我们的预期。拿去不谢~