zoukankan      html  css  js  c++  java
  • 数组复制

    前面的话

      前面的博文中介绍了对象拷贝,本文将详细介绍数组复制

    push

    function copyArray(arr){
        var result = [];
        for(var i = 0; i < arr.length; i++){
            result.push(arr[i]);
        }
        return result;
    }
    
    var obj1=[1,2,3];
    var obj2=copyArray(obj1);
    console.log(obj1); //[1,2,3]
    console.log(obj2); //[1,2,3]
    obj2.push(4);
    console.log(obj1); //[1,2,3]
    console.log(obj2); //[1,2,3,4]
    

    join

      使用该方法的缺点是数组中的项全部变成了字符串形式

    function copyArray(arr){
        var result = [];
        result = arr.join().split(',');
        return result;
    }
    
    var obj1=[1,2,3];
    var obj2=copyArray(obj1);
    console.log(obj1); //[1,2,3]
    console.log(obj2); //['1','2','3']
    obj2.push(4);
    console.log(obj1); //[1,2,3]
    console.log(obj2); //['1','2','3',4]
    

    concat

    function copyArray(arr){
        var result = [];
        result = arr.concat();
        return result;
    }
    
    var obj1=[1,2,3];
    var obj2=copyArray(obj1);
    console.log(obj1); //[1,2,3]
    console.log(obj2); //[1,2,3]
    obj2.push(4);
    console.log(obj1); //[1,2,3]
    console.log(obj2); //[1,2,3,4]
    

    slice

    function copyArray(arr){
        var result = [];
        result = arr.slice();
        return result;
    }
    
    var obj1=[1,2,3];
    var obj2=copyArray(obj1);
    console.log(obj1); //[1,2,3]
    console.log(obj2); //[1,2,3]
    obj2.push(4);
    console.log(obj1); //[1,2,3]
    console.log(obj2); //[1,2,3,4]
    

    深拷贝

      以上方法实现的仅是数组的浅拷贝,如果要实现数组的深拷贝,需要使用递归方法

    function copyArray(arr,result){
        var result = result || [];
        for(var i = 0; i < arr.length; i++){
            if(arr[i] instanceof Array){
                result[i] = [];
                copyArray(arr[i],result[i]);
            }else{
                result[i] = arr[i];
            }           
        }
        return result;
    }
    
    var obj1=[1,2,[3,4]];
    var obj2=copyArray(obj1);
    console.log(obj1[2]); //[3,4]
    console.log(obj2[2]); //[3,4]
    obj2[2].push(5);
    console.log(obj1[2]); //[3,4]
    console.log(obj2[2]); //[3,4,5]
  • 相关阅读:
    Visual Studio安装空白 和 VS Code打开失败解决方案
    基于编程人员Python学习第一章节
    Windows Live Writer安装失败错误解决方案
    知乎推荐率最高的20款耳机
    Kubernetes K8s架构师实战集训营
    大数据从入门到项目实战,精品学习材料,值得大家一看
    京峰2019Linux高端云计算架构师课程
    老男孩linux高端运维
    马哥Linux 高端运维云计算就业班
    hello
  • 原文地址:https://www.cnblogs.com/xiaohuochai/p/6354260.html
Copyright © 2011-2022 走看看