자바 스크립트 - 객체 복사

Posted by lib oimb
2019. 3. 14. 00:34 AngularJS

 

객체를 복사하여 쓸일이 있는데 JS에도 얕은 복사와 깊은 복사의 의미를 갖는 각 방법이 존재하여 정리한다.

 

1. Object.assign() 

 

객체의 프러퍼티가  key : value 구조를 이루며 value가 객체 또는 배열 구조가 아닌 경우에는 이 방법을 이용해도 좋다

하지만 value 값이 객체 또는 배열일 경우 값의 복사가 아닌 참조(포인터)값이 복사 되어 결국 값의 복사가아닌 참조를 하게 된다. (C언어 지식이 조금 필요)

 

clone_obj = Object.assign({}, default_obj); 

// 이를 함수화 시키면 아래와 같다

function cloneObject(obj) {

  return Object.assign({}, obj);
}

clone_obj = cloneObject(obj);

 

2. 재귀 호출

 

1번과 같은 방법을 사용하면 안되는 경우 아래와 같이 사용한다. 아래는 key: value 에서 value 값이 객체이건 배열이건 상관 없이 깊은 복사를 하게 된다.

 

function copy(obj){

  let out,value,key;

  out = Array.isArray(obj) ? [] : {};

  for(key in obj){

    value = obj[key];   

    out[key] = (typeof value ==="object" && value !==null) ? copy(value) : value;

  }

  return out;  

}

 

이 댓글을 비밀 댓글로