深拷贝源代码(个人手写)
嗯,虽然自己很少用。但是毕竟面试考的挺多个,写一个吧function deepClone(obj) {let isArray = Array.isArray(obj);let result = isArray ? [] : {};if (isArray) {obj.forEach((item, index) => {result[index] = deepClone(item);
·
嗯,虽然自己很少用。但是毕竟面试考的挺多个,写一个吧
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 进行拷贝
- 直接拷贝。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)