使用深度优先遍历,写一个功能完备的js深拷贝函数,兼容Set和Map类型
深拷贝函数的实现可以参考以下代码:
function deepClone(obj) {
let clonedObj;
// 判断数据类型
if (obj instanceof Set) {
clonedObj = new Set();
obj.forEach(value => {
clonedObj.add(deepClone(value));
});
} else if (obj instanceof Map) {
clonedObj = new Map();
obj.forEach((value, key) => {
clonedObj.set(deepClone(key), deepClone(value));
});
} else if (typeof obj === 'object' && obj !== null) {
clonedObj = Array.isArray(obj) ? [] : {};
Object.keys(obj).forEach(key => {
clonedObj[key] = deepClone(obj[key]);
});
} else {
clonedObj = obj;
}
return clonedObj;
}
该函数首先判断传入的参数的数据类型,如果是Set或者Map类型,则遍历其中的元素进行深拷贝;如果是对象或者数组,则递归地处理对象或者数组中的每个元素,并将其赋值给新对象或者新数组中;如果是基本数据类型,则直接返回该值。这样就可以兼容各种数据类型,并实现了完备的深拷贝功能。
原文地址: https://www.cveoy.top/t/topic/yyf 著作权归作者所有。请勿转载和采集!