function deepCopy(source, cache = new Map()) {
if (source instanceof Object) {
if (typeof source === 'function') {
return source;
}
if (Array.isArray(source)) {
const arr = [];
cache.set(source, arr);
for (let i = 0; i < source.length; i++) {
setValue(source, arr, i);
}
return arr;
}
const obj = {};
cache.set(source, obj);
for (const key in source) {
if (Object.hasOwnProperty.call(source, key)) {
setValue(source, obj, key);
}
}
const symbols = Object.getOwnPropertySymbols(source);
for (const value of symbols) {
setValue(source, obj, value);
}
return obj;
}
return source;
function setValue(source, target, key) {
if (source[key] instanceof Object) {
target[key] = cache.has(source[key]) ? cache.get(source[key]) : deepCopy(source[key], cache);
} else {
target[key] = source[key];
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通