js 배열 깊은 복사

raejun·2022년 2월 28일
0

slice는 단일 배열은 깊은 복사가 가능하지만, 중첩 배열에서는 가장 외부 참조만 복사

// slice 사용
var a = [
    [1,1,1,1],
    [2,2,2,2]
];
var a2 = a.slice();
a2[0] = [1, 2, 3, 4];
/*
출력
a: [ [ 1, 1, 1, 1 ], [ 2, 2, 2, 2 ] ]
a2: [ [ 1, 2, 3, 4 ], [ 2, 2, 2, 2 ] ]
가장 외부 부분은 완전 복사가 이루어짐
*/
// slice 사용
var a = [
    [1,1,1,1],
    [2,2,2,2]
];
var a2 = a.slice();
a2[0][0] = 0;
/*
출력
a: [ [ 0, 1, 1, 1 ], [ 2, 2, 2, 2 ] ]
a2: [ [ 0, 1, 1, 1 ], [ 2, 2, 2, 2 ] ]
중첩 구조는 얕은 복사가 이루어짐
*/
// JSON 사용
var a = [
    [1,1,1,1],
    [2,2,2,2]
];
var a3 = JSON.parse(JSON.stringify(a));
a[0][0] = [0];
/*
출력
a: [ [ 0, 1, 1, 1 ], [ 2, 2, 2, 2 ] ]
a3: [ [ 1, 1, 1, 1 ], [ 2, 2, 2, 2 ] ]
JSON을 사용하면 중첩 배열에서도 깊은 복사가 이루어짐
*/
profile
정리노트

0개의 댓글