반응형
[목표]
Javascript에서 객체 원본을 그대로 유지하고자 할 때 복사하여 사용합니다.
※ 대입연산자(=)를 사용할 경우는 참조(Reference) 변수가 되기 때문에 주의가 필요합니다.
[방법]
1. 기본으로 제공되는 함수가 없으므로 라이브러리를 구하거나 직접 만들어 써야합니다.
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
위와 같은 방법은 value가 object라면 복사가 되지 않고 참조를 하기때문에 완벽하지 않습니다.
ES6에서 Object.assign() 함수와 Spread 문법을 제공하지만 이것도 마찬가지입니다.
2. 이를 해결하려면 앞서 작성한 함수에 제귀 호출을 적용하면 됩니다.
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if(obj.hasOwnProperty(attr))
copy[attr] = ("object" != typeof obj[attr])?obj[attr]:clone(obj[attr]);
}
return copy;
}
Tip. 추가적으로 간단한 편법이 하나 더 있습니다.
function simpleClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
인자로 받은 JSON 오브젝트를 string으로 변환한 뒤에 다시 파싱하면 손쉽게 복사가 됩니다.
반응형
'프로그래밍 & IT 정보 > Javascript' 카테고리의 다른 글
자바스크립트 콜백 함수 예제를 통해 개념 및 원리 쉽게 이해하기 (12) | 2020.12.01 |
---|---|
자바스크립트 Base64 이미지 코드 파일로 쓰기 (0) | 2020.09.24 |
자바스크립트 이미지 크기 조정 및 보정 로직 (0) | 2020.09.24 |
자바스크립트 텍스트 길이(바이트) 구하기 (0) | 2020.09.24 |
자바스크립트 아스키 코드 정렬 (0) | 2020.09.24 |
로컬스토리지에서 배열로 저장하는 방법 (0) | 2020.07.03 |
자바스크립트 URL 및 E-Mail 링크 자동 생성 (0) | 2020.07.03 |
자바스크립트 타임스탬프 날짜 변환 (1) | 2020.07.02 |
댓글