티스토리 뷰

배열

여러 개의 값을 순서대로 저장하는 리스트 형태의 데이터 구조

 

배열 수정하기

let fruits = ['Apple', 'Banana', 'Cherry'];
console.log(fruits); // ['Apple', 'Banana', 'Cherry']

//배열 요소 수정 
fruits[1] = 'Blueberry';
console.log(fruits); // ['Apple', 'Blueberry', 'Cherry']

 

배열 복사하기

 > 배열을 복사할 때는 얕은 복사(shallow copy)와 깊은 복사(deep copy) 두 가지 방법이 있다.

 

얕은 복사(Shallow copy)

 - 배열의 참조를 복사하는 것으로, 원본 배열과 복사된 배열이 동일한 객체를 참조한다. 따라서 한 배열을 수정하면 다른 배열에도 영향을 미친다. 

let original = ['Apple','Banana','Cherry'];
let shallowCopy = original;

shallowCopy[1] = 'Blueberry';
console.log(original); // ['Apple','Blueberry', 'Cherry']
console.log(shallowCopy); //  ['Apple','Blueberry', 'Cherry']

 

깊은 복사(Deep Copy)

 - 배열의 모든 요소를 새로운 배열에 복사하여 원본 배열과 복사된 배열이 서로 다른 객체를 참조하게 만든다. 깊은 복사를 하면 한 배열을 수정해도 다른 배열에 영향을 미치지 않는다.

 

 1. 재귀적 복제

function deepCopy(o) {
	var result = {};
    if (typeof o === "object" && o !== null)
    	for (i in o) result[i] = deepCopy(o[i]); // i : 현재 속성의 이름(키). 이 이름은 문자열로, 객체의 각 속성에 접근할 수 있게 해 준다. 
    else result = o;
    return result; 
}

const obj1 = {
	a : 1,
    b : [1,2,3]
};

var obj2 = deepCopy(obj1);

console.log(obj1 === obj2);
console.log(obj1);
console.log(obj2);

 

*헷갈리는 것 

  - 'for (i in o)' 에서 'i'는 먼저 "a"값을 가진다.

  - 'result[i] = deepCopy(o[i]) 에서 o[i]는 o["a"] 또는 '1'이다.

     > deepCopy(1)은 result = 1을 반환하므로 result["a"] =1 이 된다. 

 

2. JSON.parse, JSON.stringify로 복사

 - 깊은 복사는 가능하지만 gettser/setter 등 JSON으로 변경할 수 없는 프로퍼티는 무시한다. 배열도 깊은 복사가 가능하지만 배열 관련 함수는 사용 불가능하다. 

let original = ['Apple', 'Banana', 'Cherry'];
let deepCopy = JSON.parse(JSON.stringify(original));

deepCopy[1] = 'Blueberry';
console.log(original); // ['Apple', 'Banana', 'Cherry']
console.log(deepCopy); // ['Apple', 'Banana', 'Cherry']

 

객체

객체 수정하기

let person = {
	name : 'John',
    age : 30
};

console.log(person); // {name : 'John', age : 30}

//객체 속성 수정
person.age = 31;
console.log(person); // {name : 'John', age : 31}

 

객체 복사하기

얕은 복사

 - 객체의 참조를 복사하는 것으로, 원본 객체와 복사된 객체가 동일한 객체를 참조한다.

let original = {
	name : 'John',
    age : 30
};
let shallowCopy = original;

shallowCopy.age = 31;
console.log(original); // {name : 'John', age : 31}
console.log(shallowCopy); // {name : 'John', age : 31}

 

깊은 복사

 - 깊은 복사는 객체의 모든 속성을 새로운 객체에 복사하여 원본 객체와 복사된 객체가 서로 다른 객체를 참조하게 만든다. 

let original = {
	name : 'John'
    age : 30
};
let deepCopy = JSON.parse(JSON.stringify(original));

deepCopy.age = 31;
console.log(original); // {name : 'John', age : 30}
console.log(deepCopy); // {name : 'John', age : 31}

 

'스파르타 > 강의 내용 정리' 카테고리의 다른 글

call 메서드의 this binding  (0) 2024.07.30
콜백함수, this  (0) 2024.07.26
변수와 상수  (1) 2024.07.23
개발 용어 정리  (0) 2024.07.11
JQuery 연습하기 (1)  (0) 2024.07.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함