📌 배열 복사하기
배열을 새로운 변수에 할당해도 배열이 복사되지는 않습니다. 새로운 변수에는 원본 배열을 가리키는 참조만 할당되며, 원본 배열의 값을 바꾸면 새 변수에서도 그 변경점이 반영됩니다.
let array1 = [1,2,3]
let array1Reference = array1;
array1[1] = 9;
console.log(array1Reference);
// Array [1,9,3] - array1의 변화가 array1Reference에도 나타남 - 복사본이 아님
배열의 복사본을 만들기 위해서는 새 배열을 위한 변수를 생성하고, 원본 배열 각각의 원시 요소에 대해서도 새로운 변수를 생성해야 합니다. (변수를 원시 값으로 초기화하면 참조를 할당하지 않고 값을 복사합니다.) JavaScript에서는 이를 위해 다음과 같은 방법을 사용할 수 있습니다.
let shallowCopySpread = [...fruits]
// ["Strawberry", "Mango"]
let shallowCopySlice = fruits.slice()
// ["Strawberry", "Mango"]
let shallowCopyFrom = Array.from(fruits)
// ["Strawberry", "Mango"]
위의 세 코드는 모두 '얕은 복사'를 생성합니다. 얕은 복사란 배열의 최상위 요소가 원시 값일 경우 복사하지만, 중첩 배열이나 객체 요소일 경우에는 원본 배열의 요소를 참조하게 됩니다.
모든 요소의 '깊은 복사', 즉 중첩 배열과 객체 요소 또한 동일한 형태로 복사하는 방법 중 하나는 JSON.stringify()를 사용해 배열을 JSON 문자열로 변환한 후, JSON.parse()로 다시 배열을 구성하는 것입니다.
let deepCopy = JSON.parse(JSON.stringify(fruits));
// ["Strawberry", "Mango"]
참고자료 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array
'코드스테이츠 > 헷갈리는거 정리' 카테고리의 다른 글
type , const (0) | 2023.01.04 |
---|---|
원시 자료형과 참조 자료형 (0) | 2023.01.02 |
GUI 와 CLI (0) | 2023.01.01 |
함수 내부에서의 console.log( )와 return 차이 (3) | 2022.12.19 |
undefined vs null vs NaN (2) | 2022.12.18 |