嗯,虽然自己很少用。但是毕竟面试考的挺多个,写一个吧
function deepClone(obj) {
let isArray = Array.isArray(obj);
let result = isArray ? [] : {};
if (isArray) {
obj.forEach((item, index) => {
result[index] = deepClone(item);
});
} else if (typeof obj === "object") {
Object.keys(obj).forEach((item) => {
result[item] = deepClone(obj[item]);
});
} else {
result = obj;
}
return result;
}
深拷贝与浅拷贝的主要就是在Object和Array这两个类型上。
对于这两种类型,拷贝时:浅拷贝只是将对象的在栈中的地址进行拷贝。而深拷贝则是将栈中地址对应的在堆中的数据进行拷贝。
所以我们深拷贝手写思想就在于处理object和array类型
- 判断是否是array 进行拷贝
- 判断是否是object 进行拷贝
- 直接拷贝。