티스토리 뷰
목차
1. 배열(array)에서의 구조 분해 할당
2. 객체(object)에서의 구조 분해 할당
구조 분해 할당 문법은 배열 혹은 객체에서 각각 값(value)이나 프로퍼티(property) 를 분해하여 손쉽게 별도의 변수에 담을 수 있도록 해준다.
1. 배열(array)에서의 구조 분해 할당
구조 분해 할당은 할당받을 변수를 왼쪽에, 분해할 대상을 오른쪽에 해서 대입하는 형식으로 작성하면 된다.
const [i, ,j] = [2, 4, [5, 6]];
console.log(i,j); // 2 [5, 6]
아래와 같이 미리 저장해 둔 배열로부터 구조 분해 할당하는 형태도 가능다.
const nested = [2, 4, [5, 6]];
const [i, ,j] = nested;
console.log(i,j); // 2 [5, 6]
...로 나머지 요소 가져오기
배열 앞쪽에 위치한 값 몇 개만 필요하고 나머지 값들은 한데 모아 저장하고 싶을 때 ...를 붙이 매개변수 하나를 추가하면 '나머지(rest)'요소들을 가져올 수 있다. 아래와 같이 쓰이는 ... 요소는 Rest elements라고 한다.
let array = [1, 2, 3, 4, 5];
let [a, b, ...rest] = array;
console.log(rest); // [3, 4, 5];
2. 객체(object)에서의 구조 분해 할당
객체(object)에서의 구조 분해 할당은 배열에서의 구조 분해 할당과 쓰이는 의미는 동일하되 쓰이는 대상이 객체로 바뀐 것 뿐이다. 단, 분해되는 대상이 배열은 array의 value(element) 였다면, 객체는 분해되는 대상이 객체의 property 인 차이가 있다.
const obj = {
name: "John",
age: 18,
memo: "Hello",
};
const { name, age, memo } = obj;
console.log(name); // "John"
console.log(age); // 18
console.log(memo); // "Hello"
// 만약 구조 분해 할당을 사용하지 않는다면?
// 아래와 같이 직접 대입해 주어야 한다.
const name = obj.name;
const age = obj.age;
const memo = obj.memo;
이처럼 obj 내부의 name, age, memo 프로퍼티들을 각각 프로퍼티명과 이름이 동일한 name, age, memo 변수에 알아서 분해하여 할당해 주고 있다.
물론 객체의 프로퍼티명과 다른 변수명으로 새롭게 지정해 줄 수도 있다.
아래는 obj로부터 분해된 name 프로퍼티의 값을 새롭게 이름지은 YourName 변수에 할당하고 있다.
const obj = {
name: "John",
age: 18,
memo: "Hello",
};
const { name: YourName, age, memo } = obj;
console.log(YourName); // 'John'
객체 구조 분해 할당은 프로퍼티를 기준으로 하기 때문에 배열 구조 분해 할당과 달리 그 순서가 뒤바뀌어도 전혀 문제없이 해당 프로퍼티의 값을 가져올 수 있다.
const obj = {
name: "John",
age: 18,
memo: "Hello",
};
// memo, name, age 순으로 작성해도 상관이 없다. 알아서 해당 프로퍼티명에 해당하는 값을 저장한다.
const { memo, name, age } = obj;
console.log(name); // 'John'
console.log(age); // 18
console.log(memo); // 'Hello'
// 배열 구조 분해 할당의 경우 작성된 순서대로 배열의 값을 넣어준다.
const [a, b, c] = [10, 20, 30];
console.log(a, b, c); // 10 20 30
여기서도 ... 문법을 활용할 수 있다.
const obj = {
name: "John",
age: 18,
memo: "Hello",
};
const { name, ...rest } = obj;
console.log(name); // "John"
console.log(rest); // { age : 18, memo: 'Hello' }
obj 객체 중 name에 프로퍼티 값이 저장되고, 나머지 age와 memo는 ...rest가 받아서 rest 변수에 모아 객체로 저장해 준다. 객체의 구조 분해 할당에서 위의 역할로 ...이 쓰이는 것을 가리켜 Rest properties 라고 부른다.
위 object rest properties를 응용하면, 쓰고 싶은 프로퍼티만 골라서 새로운 객체로 저장할 수 있는 효과를 볼 수 있다.
아래와 같은 코드가 있다고 가정해보자.
price 객체에 담긴 프로퍼티 중 apple만 제외한 나머지 프로퍼티들로 이루어진 객체를 만들고 싶을 경우, 어떻게 하면 될까?
const price = {
apple: 1000,
banana: 500,
orange: 600,
grape: 700,
};
const { apple, ...otherPrice } = price;
console.log(otherPrice); // { banana: 500, orange: 600, grape: 700 }
이렇게 Rest properties를 사용하면 객체 구조 분해 할당으로 otherPrice 객체에 apple을 제외한 나머지 프로퍼티들이 모여서 저장되므로 특정 프로퍼티만 제외한 새로운 객체를 만들어 낼 수 있다.
'Language > JavaScript' 카테고리의 다른 글
[Javascript] Array.prototype.entries() (0) | 2022.07.26 |
---|---|
[Javascript] 자바스크립트 형변환( number to string / boolean to string ) (0) | 2022.07.25 |
[JavaScript] 단축 평가(short-circuit evaluation) / 옵셔널 체이닝 연산자 / nullish 병합 연산자 '??' (0) | 2022.07.24 |
[Javascript] Set과 Map (0) | 2022.07.22 |
[Javascript] The spread opertor 스프레드 연산자(...) (0) | 2022.07.18 |
- Total
- Today
- Yesterday
- 코드잇스프린트
- javascript
- 비동기
- 프론트엔드
- Git
- 스프린트프론트엔드6기
- Target
- Next.js
- map
- currentTarget
- 리액트
- 비제어 컴포넌트
- 중급 프로젝트
- 취업까지달린다
- 코드잇 스프린트
- 유사배열객체
- rest parameter
- 배열
- tanstackquery
- innerhtml
- 동기
- react
- html
- 객체
- js
- CSS
- 제어 컴포넌트
- GitHub
- arguments
- hydrationboundary
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |