利用for...in...来遍历对象的属性,如果对象属性是数组或者对象的话,则进行递归。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function copyObject(targetObj, resultObj = {}) { for ( let key in targetObj) { switch (Object.prototype.toString.call(targetObj[key])) { case '[object Array]' : resultObj[key] = []; copyObject(targetObj[key], resultObj[key]); break ; case '[object Object]' : resultObj[key] = {}; copyObject(targetObj[key], resultObj[key]); break ; default : resultObj[key] = targetObj[key]; break ; } } return resultObj; } |
这个方法可以拷贝对象中的可枚举属性和继承的属性(for...in...可以遍历继承的属性),但不能拷贝原对象中的Symbol属性。如果想要拷贝Symbol属性,可以使用Object.getOwnPropertySymbol()方法,该方法会返回一个对象中的Symbol属性的数组,然后就可以通过遍历继续判断属性值是什么类型,再进行不同方式的拷贝。
1 2 3 4 5 6 7 8 9 10 11 12 | const a = Symbol() let obj = { [a]: 1 } Object.getOwnPropertySymbols(obj).forEach(key => { switch (obj[key]){ // .... } }) |
如果发现有错误或者不足的地方,感谢指出!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具