数组和对象拷贝

拷贝数组

		var arr = [1,'dd',123,'asjd'];
        var copy = [];
        for(var i = 0,len=arr.length;i<len;i++ ){
        //将数组arr中的数据复制到数组copy中
            copy[i] = arr[i];
         }    
         //copy.push('我是改变的内容');
         console.log(copy);
         console.log(arr);

拷贝对象

 		  var obj = {
             name : 'dhjka',
             age  : 18 
         }
         var copyObj = {...obj};
         console.log(copyObj);

运行结果:
在这里插入图片描述

拷贝一层数组和对象

		   function deepCopy(){
           var data = arguments[0];
           var res;
           console.log(data);
           if(data.constructor === Array){
               res = [...data];
           }else if(data.constructor === Object){
               res = [...data];
           }else{
                return -1;
           }
           return res;
       }
       var data = [1,2,34,4]
       var arr1 = deepCopy(data);
       arr1.push('新内容');
       console.log(data);
       console.log(arr1);

运行结果:
在这里插入图片描述

递归拷贝数组和对象

		/**
         * deepCopy(data)
         * data可能是数组也可能是对象 
         * 1:判断data是数组 对象 或者其他类型数据
         * 2:分别处理:如果是数据
         * 声明空数组:接收被拷贝数组中的数: data[i]
         * data[i]可能有数组或者对象
         * 在经过一次深拷贝  deepCopy(data[i])
         * 将处理后添加res res.push(deepCopy(data[i]))
         * 3.如果是对象:
         * 声明空对象接受拷贝数据中的数据
         */    
        function deepCopy(data){
            //1.判断data是数组 对象 或者其他类型数据
            if(data.constructor === Array){
            //1.如果是数据
            //2.声明空数组:接受被拷贝数组中的数据:data[i]
                var res = [];
                for(var i = 0;i<data.length;i++){
                    //data[i]:可能有数组或者对象
                    if(data[i] instanceof Object){
                        //如果是数组或者对象  在经过一次 深拷贝 将处理结果添加到res中
                        res.push(deepCopy(data[i]));
                    }else{
                        res.push(data[i]);
                    }
                }
                return res;
            }else if(data.constructor === Object){
                var res = {};
                for(x in data){
                    if(data[i] instanceof Array){
                        res.push(deepCopy(data[i]));
                    }else{
                        res[x] = data[x];
                    }
                }
                return res;
            }else{
                return -1;
            }
        }
        var arr = [1,2,4,{name : 'q',a:'asdlji'},''];
        var res = deepCopy(arr);
        console.log(arr);
        console.log(res);

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值