이번 스프린트부터 리액트를 다루게 되는데, ES6 문법을 잘 알고 있어야 리액트를 활용한 과제를 진행할 수 있다고 한다. 그중 Destructuring이 익숙지 않아 블로그에 정리해 본다.
Destructuring assignment란?
배열이나 객체의 속성을 해체하여 그 값을 변수에 담을 수 있게 하는 JS 표현식인다. 간단히는 배열과 객체를 좀 더 편하게 다루기 위해 ES6에서 추가된 방법이다. 해체라는 단어가 모호하기 때문에 이전 문법과 비교해서 예시를 보는 게 이해하기 쉬웠다.
Array destructuring
이전 문법에서 우리가 배열에서 어떤 값을 추출하기 위해서는 아래와 같이 변수들 각각의 인덱스를 지정해 주어야만 했다.
var number = [1, 2, 3, 4, 5];
var a = number[0]
var b = number[1]
console.log(a) //1
console.log(b) //2
하지만 ES6 부터는 각각을 지정하는 대신 한 번에 할당을 할 수 있다.
var number = [1, 2, 3, 4, 5];
var [a, b] = number
console.log(a) //1
console.log(b) //2
위와 같은 코드로 배열을 한번에 대입하는 것 도 가능하다. 3줄의 코드를 한 줄로 줄일 수 있게 됐다.
var [a, b] = [1, 2, 3, 4, 5];
console.log(a) //1
console.log(b) //2
콤마를 활용하면 더 다양한 할당도 가능하다.
var [a,,,,b] = [1, 2, 3, 4, 5, 6, 7];
console.log(a) //1
console.log(b) //5
var [,a,,b] = [1, 2, 3, 4, 5, 6, 7];
console.log(a) //2
console.log(b) //4
rest parameter도 이 형식으로 사용할 수 있다. 지정 선언된 요소를 제외한 나머지 인자들은 ...rest 에 할당된다.
var a, b, rest;
[a, b, ...rest] = [10, 20, 30, 40, 50, [60, 70]];
console.log(a); // 10
console.log(b); // 20
console.log(rest); // [30, 40, 50, [60, 70]]
var a, b;
[a, ...b] = [10, 20, 30, 40, 50, [60, 70]];
console.log(a); // 10
console.log(b); // [20, 30, 40, 50, [60, 70]]
함수가 반환한 배열에 대한 작업도 더 간편해졌다.
function f() {
return [1, 2, 3, 4, 5];
}
const [a,,b, ...c] = f();
console.log(a); // 1
console.log(b); // 3
console.log(c); // [4, 5]
Object destructuring
객체는 어떤 식으로 다룰까? 마찬가지로 같은 형식으로 작동한다.
const o = {p: 42, q: true};
const {p, q} = o;
console.log(p); // 42
console.log(q); // true
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}
console.log(a) //10
console.log(b) //20
console.log(rest) //{c: 30, d: 40}
중첩된 객체에서의 destructuring
아래의 객체에서 각각의 title 값을 밖으로 꺼내고 싶다면 어떻게 해야 할까?
다소 복잡해 보이지만, 아래와 같이 선언하면 깊이 들어있는 값들도 추출할 수 있다.
var data = {
title: "Scratchpad",
translations: [
{
locale: "de",
localization_tags: [ ],
title:
{
A: "title A",
B: "title B"
}
}
],
url: "/en-US/docs/Tools/Scratchpad"
};
var { title: englishTitle, translations: [{ title: { A : localeTitle} }] } = data;
console.log(englishTitle); // "Scratchpad"
console.log(localeTitle); // "title A"
'Coding > TIL (Today I Learned)' 카테고리의 다른 글
MySQL: SQL문 입력하다 ' 또는 `을 입력했을 때 (2) | 2020.04.02 |
---|---|
JavaScript: Promise, async & await 이해 (0) | 2020.03.20 |
CORS(Cross-Origin Resource Sharing) 에 관하여 (0) | 2020.01.27 |
브라우저는 어떻게 동작 할까 - Basic Web Architecture (0) | 2020.01.17 |
함수이름 앞에 언더바(_)를 쓰는 이유 (0) | 2020.01.15 |