当前位置: 首页 > Web前端 > HTML

问题49:如何实现对象的深拷贝?

时间:2023-04-02 19:06:00 HTML

假设我们要复制一个对象。如果我们不对它进行深拷贝,那么改变其中一个对象后,另一个对象也会改变。正常场景leta={age:20};letb=a;b.age=30;console.log(a.age);//30这不是我们想要的效果,所以当我们要复制一个全新的对象时,需要进行深拷贝。使用JSON类就是将一个对象转换成JSON字符串。在转换回JSON对象时,让a={age:20};让b=JSON.parse(JSON.stringify(a));b.age=30;console.log(a.age);//20advantages:advantages方便快捷,性能比较好。缺点:但是,复杂的对象在转换为JSON时可能会丢失其属性。下面的代码leta={age:20,local:function(){return5;}};让b=JSON。解析(JSON.stringify(a));console.log(b);//{age:20}console.log(b.local());//b.loacl不是使用递归dfs的函数deep-copy.js//深度优先遍历letdfs=data=>{letnewData;if(type(data)==='array'){newData=[];data.map((item,index)=>{newData[index]=dfs(item);});}elseif(type(data)==='object'){newData={};Object.keys(data).map(item=>{newData[item]=dfs(data[item]);});}else{newData=数据;}返回新数据;};//类型字典exportlettype=data=>{letdist={'[objectArray]':'array','[objectObject]':'object','[objectNumber]':'number','[objectFunction]':'function','[objectString]':'string','[objectNull]':'null','[objectUndefined]':'undefined'};returndist[Object.prototype.toString.call(data)];};exportdefaultdfs;index.vue优点:对象转换比较稳定,保留原有属性缺点:对象层级越深,属性越多,性能消耗越大高的文章内容/灵感借鉴自下面内容【持续维护/更新500+前端面试题/笔记】https://github.com/noxussj/In...【大数据可视化图表插件】https://www.npmjs。com/package...【使用THREE.JS实现3D城市建设Model(ZhuhaiCity)]https://3d.noxussj.top/