关于几个拷贝的问题

2018-11-17  本文已影响0人  kalrase

数组浅拷贝

var arr=[1,2,3];
 var arr2=arr;
arr.push(4);

数组深拷贝

 var arr=[1,2,3];
 var arr2=[];
 for(var i=0;i<arr.length;i++){
    arr2[i]=arr[i];
 }

复合数组深拷贝

var arr=[1,2,{name:"123"}];
// console.log(arr.constructor.name);
// var obj={}
// var arr2=[1,2];


//深拷贝

function deepClone(argu){

    if(argu.constructor.name==="Array"){//为数组

        var arr=[];

        for(var i=0;i<argu.length;i++){
                
            if(typeof argu[i]==="object"){//为对象或数组

                arr.push(deepClone(argu[i]));

            }else{//如果值是值类型,则直接添加
                arr.push(argu[i]);
            }

        }

        return arr;


    }else{//为对象

        var obj={};

        for(var x in argu){
            
            if(typeof argu[x]==="object"){
                obj[x]=deepClone(argu[x]);
            }else{
                obj[x]=argu[x];
            }

        }

        return obj;

    }

}


var a=[{
    person:[1,2,3,{
        name:"rase"
    }]
}]

var res=deepClone(a);
a[0].person[3].name="kalrase";

console.log(res);
上一篇 下一篇

猜你喜欢

热点阅读