js 깊이 복제 의 몇 가지 방법

1465 단어 자바 script
방법 1
성실 하 게 코드 를 두 드 리 는 법 (교체 법, 모든 것 에 적용)
function deepClone(obj) {
    let newObj = Array.isArray(obj) ? [] : {}
    if (obj && typeof obj === "object") {
        for (let key in obj) {
            if (obj.hasOwnProperty(key)) {
                newObj[key] = (obj && typeof obj[key] === 'object') ? deepClone(obj[key]) : obj[key];
            }
        }
    } 
    return newObj
}
const newObj = deepClone(oldObj));

방법 2
JSON. stringify 를 이용 하여 js 대상 을 직렬 화 (JSON 문자열) 하고 JSON. parse 를 사용 하여 js 대상 을 반 직렬 화 (복원) 합 니 다.
const newObj = JSON.parse(JSON.stringify(oldObj));

단점:
  • obj 에 시간 대상 이 있 으 면 JSON. stringify 이후 JSON. parse 의 결과 시간 은 문자열 형식 일 것 입 니 다.시간의 대상 이 아니 라
  • 만약 에 obj 에 RegExp, Error 대상 이 있 으 면 직렬 화 된 결 과 는 빈 대상 만 얻 을 수 있 습 니 다.
  • 만약 에 obj 에 function, Symbol 형식, undefined 가 있 으 면 직렬 화 된 결 과 는 함수 나 undefined 를 잃 어 버 립 니 다.
  • obj 에 NaN, Infinity, - infinity 가 있 으 면 직렬 화 된 결 과 는 null 이 됩 니 다. 
  • JSON. stringify () 는 대상 의 매 거 진 속성 만 정렬 할 수 있 습 니 다. 예 를 들 어 obj 의 대상 이 구조 함수 로 생 성 된 경우 JSON. parse (JSON. stringify (obj) 를 사용 하여 깊이 복사 하면 대상 의 constructor 를 버 립 니 다.

  • 방법
    const newObj = Object.assign([],oldObj);

    결점.
  • Object. assign 은 최상 위 속성 에 만 할당 을 했 을 뿐 재 귀 와 같은 모든 다음 층 의 속성 을 깊이 복사 하지 않 았 습 니 다.

  • 한 마디 로 하면 1 층 은 깊이 있 는 복사 가 실현 되 었 고 후속 적 인 차원 은 얕 은 복사 이다.

    좋은 웹페이지 즐겨찾기