typescript深拷贝

最近在做ionic3的项目时,遇到了一个复杂对象被赋值给多个变量,其中一个变量修改后,导致所有其他变量都跟着改变了的情况。

这个其实在javascript中就存在的一个问题,在typescript中也是存在的。虽然typescript针对深度拷贝提供了一个Object.assign(target, ...source)方法来解决,但是对于嵌套的情况缺比较无力。于是笔者在综合了网上各位大佬的方案后做了一个如下的函数,该函数针对数组和一般的json复杂对象亲测有效。至于其他情况目前还没考虑到,如果有谁遇到并解决了希望能分享下,谢谢了先。

下面上代码:

    //深度拷贝json对象的函数,
    //source:待拷贝对象
    //返回一个新的对象
    DeepCopy(source: Object): any 
    {
        if(null == source || {} == source || [] == source)
        {
            return source;
        }
        
        let newObject : any;
        let isArray = false;
        if((source as any).length)
        {
            newObject = [];
            isArray = true;
        }
        else
        {
            newObject = {};
            isArray = false;
        }
        
	    for (let key of Object.keys(source))
	    {
	        if(null == source[key])
	        {
	            if (isArray)
	            {
	                newObject.push(null);
	            }
	            else
	            {
	                newObject[key] = null;
	            }
	        }
	        else
	        {
	            let sub = (typeof source[key] == 'object') ? this.DeepCopy(source[key]) : source[key];
	            if(isArray)
	            {
	                newObject.push(sub);
	            }
	            else
	            {
	                newObject[key] = sub;
	            }
	        }
	    }
	    return newObject;
    }

 

另外从一个网上看到一个比较简洁的方法:

let obj3 = JSON.parse(JSON.stringify(obj1));

 

再次感谢网上的大佬们的分享,参考文档:

https://blog.csdn.net/wf19930209/article/details/84635951

https://www.jianshu.com/p/eee4c75a6db1

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值