배열 복사

2259 단어 프런트엔드

앞말


  앞의 블로그에서 대상 복사를 소개했는데, 본고는 수조 복제를 상세하게 소개할 것이다.
 

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]

전문 프런트엔드 지식 추가
【원숭이2048】www.mk2048.com

좋은 웹페이지 즐겨찾기