gaialun

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  2 随笔 :: 0 文章 :: 0 评论 :: 720 阅读

利用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]){
           // ....
      
    }
})       

  如果发现有错误或者不足的地方,感谢指出!

posted on   能倒杯茶吗?  阅读(210)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示