Destructuring 문법은 배열이나 객체 안의 중요한 데이터들을 손쉽게 추출하여 변수에 할당할 수 있도록 도와줍니다. 한두 개의 데이터라면 기존 방식도 괜찮지만, 여러 데이터를 뽑아야 한다면 코드가 길어지게 되는데, 이때 유용하게 사용됩니다.
전통적인 방식은 배열 인덱스로 하나씩 추출합니다.
var array = [2, 3, 4];
var a = array[0];
var b = array[1];
var c = array[2];
Destructuring을 사용하면:
var [a, b, c] = [2, 3, 4];
// a = 2, b = 3, c = 4
배열의 요소 개수가 부족할 경우, 기본값(default value)을 설정할 수 있습니다.
var [a, b, c = 5] = [2, 3];
// a = 2, b = 3, c = 5 (배열에 세 번째 값이 없으므로 5가 기본값으로 할당)
객체의 key와 value를 변수에 쉽게 할당할 수 있습니다.
var { name: a, age: b } = { name: 'Kim', age: 30 };
// a = 'Kim', b = 30
name: a는 객체의 key인 name을 변수 a에 할당한다는 뜻입니다.객체의 key와 변수명이 동일하다면, 한 번만 작성해도 됩니다.
var { name, age } = { name: 'Kim', age: 30 };
// name = 'Kim', age = 30
변수를 객체에 집어넣을 때도 Destructuring과 비슷한 개념이 적용됩니다.
var name = 'Kim';
var age = 30;
var obj = { name, age };
// key와 변수명이 같으면 { name: name, age: age }를 { name, age }로 축약 가능
함수의 파라미터에 직접 객체의 key를 구조 분해하여 변수로 사용할 수 있습니다.
function 함수({ name, age }) {
console.log(name);
console.log(age);
}
var obj = { name: 'Kim', age: 20 };
함수(obj); // name: 'Kim', age: 20
배열도 같은 방식으로 구조 분해할 수 있습니다.
function 함수([name, age]) {
console.log(name);
console.log(age);
}
var array = ['Kim', 30];
함수(array); // name: 'Kim', age: 30
var [number, address] = [30, 'seoul'];
var { address: a, number = 20 } = { address, number };
number = 30, address = 'seoul'{ address: 'seoul', number: 30 }과 동일합니다.a에 'seoul'이 할당되고, number는 이미 30이므로 그대로 30이 유지됩니다.a = 'seoul'address = 'seoul' (첫 번째 줄의 변수는 그대로 유지)number = 30주어진 객체:
let 신체정보 = {
body: {
height: 190,
weight: 70
},
size: ["상의 Large", "바지 30인치"],
};
목표: 키, 몸무게, 상의 사이즈, 하의 사이즈를 각각 변수로 추출
Destructuring을 사용한 해결 방법:
let {
body: { height, weight },
size: [상의, 하의]
} = 신체정보;
height = 190weight = 70상의 = "상의 Large"하의 = "바지 30인치"