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

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

下面上代码:

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

 

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

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

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

收藏 打印