• 数组复制


    前面的话

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

    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]
  • 相关阅读:
    函数节流和防抖
    前端优化
    webpack模块
    link和@import的区别
    BFC--CSS
    javaoop_破解jdbc
    javaoop反射
    java-oop集合与泛型
    java中几个小遗漏
    java异常处理和日志管理
  • 原文地址:https://www.cnblogs.com/xiaohuochai/p/6354260.html
Copyright © 2020-2023  润新知