【JavaScript】面试手撕深拷贝
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (obj instanceof Date) {
return new Date(obj.getTime());
}
if (obj instanceof Array) {
return obj.reduce((arr, item, i) => {
arr[i] = deepClone(item);
return arr;
}, []);
}
if (obj instanceof Object) {
return Object.keys(obj).reduce((newObj, key) => {
newObj[key] = deepClone(obj[key]);
return newObj;
}, {});
}
}
// 使用示例
const original = {
name: 'John',
birthday: new Date('1990-01-01'),
roles: ['Admin', 'User'],
settings: {
theme: 'dark',
logs: true
}
};
const clone = deepClone(original);
console.log(clone); // 输出克隆后的对象
这段代码实现了一个简单的深度克隆函数,它能够处理日期、数组和普通对象的深度复制。通过递归的方式,它能够克隆对象中嵌套的所有对象和数组。使用时,只需调用deepClone
函数并传入要克隆的对象即可得到一个完全独立的副本。
评论已关闭