프로그래밍 & IT 정보/Javascript

자바스크립트 JSON 오브젝트 복사

아미넴 2020. 7. 2.
반응형

 

[목표]

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으로 변환한 뒤에 다시 파싱하면 손쉽게 복사가 됩니다.

반응형

댓글

💲 추천 글