두 객체를 합치는 방법
이번 포스팅은 JavaScript에서 두 객체를 합치기 위해 알아야 할 모든 내용을 설명합니다.
Object.assign()
Object.assign() 메서드를 사용하여 두 개 이상의 객체를 합칠 수 있습니다. Object.assign() 메서드는 객체의 열거 가능한 프로퍼티를 복사 후 새로운 객체에 붙여 넣습니다.
Object.assign(target, source1, source2, ..., sourceN);
매개변수
target: 두 개 이상의 객체가 합쳐진 객체입니다.
source1, source2, ..., sourceN: 합쳐지는 객체들입니다.
반환 결과
합쳐진 객체를 반환합니다.
const A = {
name: 'John',
age: 20,
job: 'developer'
};
const B = {
email: 'test@test.com',
address: 'Seoul',
job: 'doctor'
};
const result = Object.assign({}, A, B);
console.log(result);
// {name: 'John', age: 20, job: 'doctor', email: 'test@test.com', address: 'Seoul'}
Object.assign() 메서드는 매개변수로 전달된 객체에서 동일한 프로퍼티가 존재하는 경우 뒤에 있는 객체가 앞에 있는 객체를 덮어씁니다. A, B 객체는 job이라는 동일한 이름의 프로퍼티를 가지고 있는데, B 객체의 job 프로퍼티의 값이 설정된 것을 확인할 수 있습니다.
spread(...) 연산자
또 다른 방법으로 ES6에서 도입된 spread(...) 연산자를 사용할 수 있습니다.
const A = {
name: 'John',
age: 20,
job: 'developer'
};
const B = {
email: 'test@test.com',
address: 'Seoul',
job: 'doctor'
};
const result = {
...A,
...B
};
console.log(result);
// {name: 'John', age: 20, job: 'doctor', email: 'test@test.com', address: 'Seoul'}
Object.assign() 메서드와 마찬가지로 동일한 프로퍼티가 존재하는 경우 뒤에 있는 객체가 앞에 있는 객체를 덮어씁니다.
얕은 병합(Shallow Merge)
Object.assig() 메서드와 Spread(...) 연산자는 얕은 병합을 수행합니다.
아래는 A 객체와 B 객체를 병합한 다음 A 객체의 age 프로퍼티의 값을 변경합니다.
const A = {
name: {
firstName: 'Hong',
lastName: 'Gil Dong'
},
age: 20,
job:'developer'
};
const B = {
email: 'test@test.com',
address: 'Seoul'
};
const result = {
...A,
...B
};
A.age = 45;
console.log(result);
[실행 결과]
실행 결과에서 알 수 있듯이 A 객체의 age 프로퍼티의 값을 변경하더라도 result 객체의 age 프로퍼티의 값은 변경되지 않습니다.
하지만, 아래 예제처럼 중첩된 객체의 프로퍼티의 값을 변경하면 병합된 객체의 프로퍼티의 값도 변경됩니다.
const A = {
name: {
firstName: 'Hong',
lastName: 'Gil Dong'
},
age: 20,
job:'developer'
};
const B = {
email: 'test@test.com',
address: 'Seoul'
};
const result = {
...A,
...B
};
A.name.firstName = 'Jin';
console.log(result);
[실행 결과]
A 객체의 name 프로퍼티와 result 객체의 name 프로퍼티가 동일한 객체를 참조하므로 중첩된 객체를 병합해야 하는 경우 lodash 라이브러리의 merge() 메서드를 사용하거나 참조 값을 복사하지 않도록 재귀 함수를 구현합니다.
정리
- 두 객체를 합치는 방법으로 Object.assign() 메서드 또는 Spread(...) 연산자를 사용할 수 있습니다.
- Object.assign() 메서드와 Spread(...) 연산자는 얕은 병합을 수행하므로 중첩된 객체를 병합하는 경우 lodash 라이브러리의 merge() 메서드를 사용하거나 재귀 함수를 구현합니다.
'JavaScript > Tip' 카테고리의 다른 글
[JS]이미지가 로딩되었는지 체크하는 방법 (0) | 2022.12.11 |
---|---|
[JavaScript]아스키코드 및 유니코드 변환 방법 (0) | 2022.12.09 |
[JavaScript]현재 페이지 새로고침하는 방법 (0) | 2022.12.08 |
[JavaScript]location 객체 사용 방법 (0) | 2022.12.07 |
[JavaScript]대화 상자 - alert, prompt, confirm (0) | 2022.12.06 |
댓글