구조 분해 할당
React를 공부하다 보면 굉장히 많이 만나는 개념인데 한번
공부하면서 정리해보고자 합니다.
객체 , 배열에 사용됩니다.
배열
let arr = ["One", "Two"];
let [first, second] = arr;
console.log(first);
console.log(second);
first = "One" , second = "Two" 가 할당됩니다.
배열 값 버리기
let arr = ["One", "Two", "Three"];
let [first, , Three] = arr;
console.log(first);
console.log(Three);
, , 를 사용하면 "Two"가 생략되고 그 뒤에 Three가 받아와 집니다.
.entries() 이용한 key value 출력
let user = {
name: "HwanMIn",
age: 26,
};
for (let [key, value] of Object.entries(user)) {
console.log(`${key}:${value}`); // name:HwanMin, age:26이 차례대로 출력
}
값 교환
원래 방법
let guest = "guest";
let admin = "HwanMin";
let temp;
// 임시변수를 이용해서 값을 교환한다.
temp = guest;
guest = admin;
admin = temp;
console.log(guest, admin);
현실세계에선 자리를 바꿀 때 서로 일어나서 자리를 바꾸면 되지만
프로그래밍에서는 의자가 3개 필요하다.
A -> C
B -> A
A -> B
이런식으로 원리가 필요하지만 , 구조분해 할당을 이용하면 더 편하게 값 교환이
가능하다고 합니다.
구조 분해 할당 적용한 방법
let guest = "guest";
let admin = "HwanMin";
[guest, admin] = [admin, guest];
console.log(guest, admin);
... 나머지 값 받아오기
let [name1, name2, ...rest] = [
"Julius",
"Caesar",
"Consul",
"of the Roman Republic",
];
name1 = "Julius" , name2 = "Caesar" 가 할당되고
나머지 두개에 배열 요소는 ...rest에 할당 됩니다.
[ 'Consul', 'of the Roman Republic' ]
...rest가 가장 마지막에 위치해야 한다고 합니다.
기본값
let [firstName, surname] = [];
값이 없으면 undefine이 할당됩니다.
// 기본값
let [name = "Guest", surname = "Anonymous"] = ["Julius"];
name만 Julius가 할당 됩니다.
객체
let options = {
title: "Menu",
width: 100,
height: 200
};
let {title, width, height} = options;
각각 변수에 객체에 해당하는 value 값이 할당 됩니다.
배열과는 다르게 순서는 상관없이 key값으로 되기 때문에 순서를
바꿔도 괜찮습니다.
let options = {
title: "Menu"
};
let {width = 100, height = 200, title} = options;
프로퍼티 없을 시 기본값 할당
let options = {
Name: "HwanMin",
age: 26,
height: 190,
};
let { Name, ...rest } = options;
console.log(Name); // HwanMin
console.log(rest.age); // 26
console.log(rest.height); // 190
... 상용 시 나머지 객체가 담겨져 있다.
위 코드에서는 Name값을 가져오고 ...rest = {age : 26 , height : 190} 인 상태
// 함수에 전달할 객체
let options = {
title: "My menu",
items: ["Item1", "Item2"]
};
// 똑똑한 함수는 전달받은 객체를 분해해 변수에 즉시 할당함
function showMenu({title = "Untitled", width = 200, height = 100, items = []}) {
// title, items – 객체 options에서 가져옴
// width, height – 기본값
alert( `${title} ${width} ${height}` ); // My Menu 200 100
alert( items ); // Item1, Item2
}
showMenu(options);
함수 파라미터로 객체를 전달 받으면
순서에 상관 없이 편하게 값을 받아 올 수 있다.
JavaScript.info 과제 부분 해결하기
문제 1
아래와 같은 객체가 있다고 가정해봅시다.
let user = {
name: "John",
years: 30
};
구조 분해 할당을 사용해 아래 미션을 수행해 보세요.
- name 프로퍼티의 값을 변수 name에 할당하세요.
- years 프로퍼티의 값을 변수 age에 할당하세요.
- isAdmin 프로퍼티의 값을 변수 isAdmin에 할당하세요. isAdmin이라는 프로퍼티가 없으면 false를 할당하세요.
미션을 달성하면 아래 예시를 제대로 실행할 수 있게 됩니다.
<내가 푼 답>
let user = { name: "John", years: 30 };
let { name, years: age, isAdmin = false } = user;
console.log(name);
console.log(age);
console.log(isAdmin);
문제 2
급여 관련 정보가 저장된 객체 salaries가 있다고 가정해 봅시다.
let salaries = {
"John": 100,
"Pete": 300,
"Mary": 250
};
가장 많은 급여를 받는 사람의 이름을 반환해주는 함수 topSalary(salaries)를 만들어봅시다. 조건은 아래와 같습니다.
- salaries가 비어있으면 함수는 null을 반환해야 합니다.
- 최대 급여를 받는 사람이 여러 명이라면 그 중 아무나 한 명 반환하면 됩니다.
힌트: Object.entries와 구조 분해를 사용해 키-값 쌍을 순회하는 방식을 사용해보세요.
<내가 푼 답>
function topSalary(obj) {
let maxSal = 0;
let buja = null;
for (let [name, sal] of Object.entries(obj)) {
if (sal > maxSal) {
maxSal = sal;
buja = name;
}
}
return buja;
}
let salaries = {
John: 100,
Pete: 300,
Mary: 250,
};
console.log(topSalary(salaries));
reference: https://ko.javascript.info/destructuring-assignment#tasks
'FrontEnd > JavaScript' 카테고리의 다른 글
[JS] Shallow Copy Deep Copy (0) | 2022.05.16 |
---|---|
[JavaScript] Set 개념에 대해 알아보기 ! (0) | 2022.04.30 |
[JavaScript] 배열 APIs (0) | 2022.04.03 |
[Javascirpt] 옵셔널 체이닝 ?. (0) | 2022.03.18 |
[JavaScript] array.sort() 동작원리 파악하기 (0) | 2022.02.28 |