Destructuring (구조 분해 할당)
JavaScript로 개발을 하다 보면 함수에 객체나 배열을 전달하는 경우가 생긴다.
또 모든 데이터가 아닌 일부만 필요한 경우도 자주 생긴다.
이럴 때 Destructing(구조 분해 할당)을 통해 객체나 배열을 변수로 쉽게 분해할 수 있다.
1. Array Destructuring (배열 구조 분해 할당)
1) 배열은 인덱스 위치를 기준으로 할당된다.
const arr = [1, 2, 3];
const [one, two, three] = arr;
console.log(one, two, three); // 1 2 3
[x, y] = [1];
console.log(x, y); // 1 undefined
[x, y] = [1, 2, 3];
console.log(x, y); // 1 2
// 쉼표 → 특정 배열 요소를 무시
[x, , z] = [1, 2, 3];
console.log(x, z); // 1 3
// 기본값 → undefined일 때 그 값을 대신 사용
[x, y = 10, z = 3] = [1, 2];
console.log(x, y, z); // 1 2 3
// Spread → 나머지 배열들로 새로운 배열을 만듦
[x, ...rest] = [1, 2, 3];
console.log(x, y); // 1 [ 2, 3 ]
2) 메서드의 반환 값을 바로 구조 분해 할당하면 편리하다.
let [firstName, surname] = "Seokzin So".split(' ');
3) 배열뿐 아니라 모든 Iterable이 올 수 있다.
let [a, b, c] = "abc"; // ["a", "b", "c"]
let [one, two, three] = new Set([1, 2, 3]);
4) 두 개 이상의 변수 값 교환에 구조 분해 할당을 응용할 수 있다.
let guest = "Jane";
let admin = "Pete";
[guest, admin] = [admin, guest];
2. Object Destructuring (객체 구조 분해 할당)
1) 객체는 프로퍼티 이름(키)을 기준으로 할당된다.
const obj = { firstName: "Seokzin", lastName: "So" };
// 프로퍼티 키를 기준으로 구조분해할당. 순서 의미는 X
const { lastName, firstName } = obj;
console.log(firstName, lastName); // Seokzin So
2) 좌측엔 객체 형태로 대응하면 된다.
const { prop1: p1, prop2: p2 } = { prop1: "a", prop2: "b" };
console.log(p1, p2); // 'a' 'b'
// 축약형
const { prop1, prop2 } = { prop1: "a", prop2: "b" };
console.log({ prop1, prop2 }); // { prop1: 'a', prop2: 'b' }
// default value
const { prop1, prop2, prop3 = "c" } = { prop1: "a", prop2: "b" };
console.log({ prop1, prop2, prop3 }); // { prop1: 'a', prop2: 'b', prop3: 'c' }
3) 필요한 프로퍼티 값만을 추출할 수 있다.
const todos = [
{ id: 1, content: "HTML", completed: true },
{ id: 2, content: "CSS", completed: false },
{ id: 3, content: "JS", completed: false },
];
// 객체로부터 completed 프로퍼티만을 추출
const completedTodos = todos.filter(({ completed }) => completed);
console.log(completedTodos); // [ { id: 1, content: 'HTML', completed: true } ]
4) 중첩 객체에서의 추출
const person = {
name: 'Lee',
address: {
zipCode: '03068',
city: 'Seoul'
}
};
const { address: { city } } = person;
console.log(city); // 'Seoul'
'프론트엔드 > JavaScript' 카테고리의 다른 글
[JavaScript] Spread와 Rest의 차이 (0) | 2022.01.02 |
---|---|
[JavaScript] var, let, const 차이 (0) | 2021.12.14 |
[JavaScript] axios와 fetch 차이 (0) | 2021.12.09 |
[JavaScript] Clean Code - 11. 주석(Comments) (0) | 2021.08.28 |
[JavaScript] 클린 코드 - 10. 포맷팅(Formatting) (0) | 2021.08.28 |