递归拷贝,可以单独封装到工具包里,直接调用
递归深拷贝方法
1
2 // 拷贝对象
3 // 从原型上判断这个对象的类型是什么
4 function checkType(Obj) {
5 return Object.prototype.toString.call(Obj).slice(8, -1)
6 }
7 // 不同的对象调用不同的拷贝方式
8 const cloneFn = (Obj) => {
9 if(checkType(Obj) === 'Object') { // 拷贝对象
10 let o = {};
11 for(let key in Obj) {
12 o[key] = cloneFn(Obj[key])
13 }
14 return o;
15 } else if(checkType(Obj) === 'Array') { // 拷贝数组
16 var arr = []
17 for(let i = 0,leng = Obj.length;i<leng;i++) {
18 arr[i] = cloneFn(Obj[i])
19 }
20 return arr;
21 } else if(checkType(Obj) === 'Function') { // 拷贝函数
22 return new Function('return '+Obj.toString()).call(this)
23 } else if(checkType(Obj) === 'Date') { // 拷贝日期
24 return new Date(Obj.valueOf())
25 } else if(checkType(Obj) === 'RegExp') { // 拷贝正则
26 return new RegExp(Obj)
27 } else if(checkType(Obj) === 'Map') { // 拷贝Map 集合
28 let m = new Map()
29 Obj.forEach((v,k)=>{
30 m.set(k, cloneFn(v))
31 })
32 return m
33 } else if(checkType(Obj) === 'Set') { // 拷贝Set 集合
34 let s = new Set()
35 for(let val of Obj.values()) {
36 s.add(cloneFn(val))
37 }
38 return s
39 }
40 return Obj;
41 }
42 console.log(cloneFn({name:'MM',age:19}))
来源: 作者:Cpp程序员 https://www.bilibili.com/read/cv14520067/ 出处:bilibili
忍一时,越想越气;
退一步,哎呦我去!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库