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]
  • 相关阅读:
    DNS服务器原理简述、搭建主/从DNS服务器并实现智能解析
    JQuery02
    JQuery01
    python05
    python04
    python03
    Liunx命令
    Python运算符及注释
    python01
    原生JDBC+mybatis
  • 原文地址:https://www.cnblogs.com/xiaohuochai/p/6354260.html
Copyright © 2011-2022 走看看