배열, 객체 분해하기
- 객체나 배열을 변수로
분해
할 수 있게 해주는 문법
- 함수의 매개변수가 많거나 매개변수 기본값이 필요한 경우 유용
let arr = ['Bora', 'Lee']
let [fistName, surname] = arr;
alert(firstName);
alert(surname);
let {var1, var2} = {var1:…, var2:…}
let {title, width, height} = options;
let {height, width, title} = { title: "Menu", height: 200, width: 100 }
let [firstName, surname] = "Bora Lee".split(' ');
- 원본은 파괴되지 않는다 변수로 재할당하는 과정이 줄어드는 것 뿐
- 필요없는 요소는 가져오지 않는 방법
let [firstName, , title] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];
alert( title );
- 모든 이터러블은 구조 분해가능하다
- 배열, 객체, 변수 뭐든지 할당받는 것이 가능
let user = {};
[user.name, user.surname] = "Bora Lee".split(' ');
alert(user.name);
- 변수 교환 트릭(swap)
- 이 방식을 사용하면 두 개 이상의 변수에 담긴 값도 교환할 수 있다
let guest = "Jane";
let admin = "Pete";
[guest, admin] = [admin, guest];
alert(`${guest} ${admin}`);
let [name1, name2, ...rest] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];
alert(name1);
alert(name2);
alert(rest[0]);
alert(rest[1]);
alert(rest.length);
- 구조 분해도 일반 변수와 동일하게 동작해서 할당값이 없으면 undefined가 할당되고 기본값을 설정할 수 있다.
- 객체를 구조 분해 할 때 변수명을 객체의 키와 다른 이름으로 사용하는 방법
let options = {
title: "Menu",
width: 100,
height: 200
};
let {width: w, height: h, title} = options;
alert(title);
alert(w);
alert(h);
- 선언된 변수를 이용하기 - ()쳐주기
- {}를 블록으로 인식해서 선언을 하지않고 {}를 썼다고 오류남
let title, width, height;
{title, width, height} = {title: "Menu", width: 200, height: 100};
let title, width, height;
({title, width, height} = {title: "Menu", width: 200, height: 100});
alert( title );
중첩 구조 분해
let options = {
size: {
width: 100,
height: 200
},
items: ["Cake", "Donut"],
extra: true
};
let {
size: {
width,
height
},
items: [item1, item2],
title = "Menu"
} = options;
alert(title);
alert(width);
alert(height);
alert(item1);
alert(item2);
매개변수에 구조 분해 사용하기
let options = {
title: "My menu",
items: ["Item1", "Item2"]
};
function showMenu({title = "Untitled", width = 200, height = 100, items = []}) {
alert( `${title} ${width} ${height}` );
alert( items );
}
showMenu(options);
let options = {
title: "My menu",
items: ["Item1", "Item2"]
};
function showMenu({
title = "Untitled",
width: w = 100,
height: h = 200,
items: [item1, item2]
}) {
alert( `${title} ${w} ${h}` );
alert( item1 );
alert( item2 );
}
showMenu(options);
showMenu({});
showMenu();
무슨말인지 모르겠는 부분
- .entries()로 반복하기
- 이 메서드와 구조 분해를 조합하면 객체의 키와 값을 순회해 변수로 분해 할당할 수 있습니다.
let user = {
name: "John",
age: 30
};
for (let [key, value] of Object.entries(user)) {
alert(`${key}:${value}`);
}
let user = new Map();
user.set("name", "John");
user.set("age", "30");
for (let [key, value] of user) {
alert(`${key}:${value}`);
}
참고자료
모던 javascript 튜토리얼 - 구조 분해 할당