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

你可能感兴趣的:(ionic+cordova)