본문 바로가기

Programming/javascript

[javascript] 배열복사(passing by value) 편하게 하기.

javascript의 array는 object입니다.

따라서 복사하려는 array 변수를 대입연산 이용시 paasing by reference가 일어나 주소값이 복사되지요.

(얕은 복사, shallow copy)


간혹 소스보기를 통해 javascript 코드를 쫓다보면 위 문제를 막고자 반복문을 통해서 copy하는 경우를 보게 됩니다.

이는 코드생산성에 별로 좋지 않은 방법같습니다.

그래서 소개해드릴 방법은 array object가 제공하는 메소드를 이용하는 겁니다.


바로 slice() 메소드입니다.

slice 메소드의 매개변수는 숫자를 매개변수로 받고 그 매개변수를 index로 인식하여

해당 index 부터의 값들을 copy하여 array를 새로운 객체로 return합니다.

보통은 array.slice(start index, end index)를 이용하여 원하는 array만 얻고자할 때 쓰이는 메소드인데

이를 이용하면 아주 쉽게 깊은 복사(deep copy)를 할 수 있습니다.


var arrayOriginal = new Array();
arrayOriginal.push("a");
arrayOriginal.push("b");
arrayOriginal.push("c");
var arrayClone = arrayOriginal.slice(0);
arrayOriginal.push("d");
arrayClone.unshift("d");
// arrayOriginal => a, b, c, d
// arrayClone => d, a, b, c