递归方法实现深拷贝

137 阅读1分钟

1.

	 var data=[        {            name:'aa',list:[                {name:'bb'}            ]}
    ]
    function deepCopy(data){
        if(Array.isArray(data)){
            var res =[];
            for(var i=0;i<data.length;i++){
                if(data[i] instanceof Object){
                    var copy =deepCopy(data[i])
                    res.push(copy)
                }else{
                    res.push(data[i])
                }
            }
            return res;

        }else if(data.constructor === Object){
            var res=[];
            for(var x in data){
                //如果data【x】可能是数组或者对象时候
                if(data[x] instanceof Object){
                    var copy = deepCopy(data[x])//执行拷贝
                    res[x]=copy;//
                }else{
                    res[x]=data[x]
                }
            
            }

            return res;
        }
    }
    
  
  

2.

     var data = [
        1,
        {name:'aa',list:[]},
        [1,2,3,4,[1]],
        {name:'11'}
    ]
    function deepCopy(data){
        // 如果不是数组后者对象     直接返回
        if(!(data instanceof Object)){
            return data
        }
        //如果是数组进行数组的深拷贝
        if(Array.isArray(data)){
            //新建数组
            var res = []
            //2.将data 中数拷贝到res中
            for(var i = 0 ;i<data.length;i++){
                // data[i] 数组 对象 其他类型    
                res.push(deepCopy(data[i]))

            }
            //返回数组拷贝结果
            return res
        }

        var obj = {}
        for(var x in data){
            console.log(data[x]);
            obj[x] = deepCopy(data[x])
        }
        return obj
    }
    //1.首先排除特殊条件 js 基本数据类型
    //2.分别对数组和对象分别进行深拷贝
    //2.1首先要创建{}[]
    //2.2将拷贝内容添加到 [] {} 中