본문 바로가기
프로그래밍 개발/JS ES6+

Javascript ES6+ Destructuring assignment

by Jinseok Kim 2020. 12. 14.
반응형

 

 

Destructuring assignment

 

 

 

 

 

 

배열의 해체할당

 

var colors = ['red', 'white', 'orange']
var first = colors[0]
var second = colors[1]
var third = colors[2]
console.log(first, second, third)
//결과: red white orange


const colors = ['red', 'white', 'orange']
const [first, second, third] = colors
console.log(first, second, third)
//결과: red white orange

위의 두 코드의 결과는 똑같다. ES6+부터는 변수 이름을 배열화할 수 있게 되었다.

 

 

 

const colors = ['red', 'white', 'orange']
const [ , , third, fourth] = colors
console.log(third)

//결과: orange

변수 이름의 배열화를 위와 같이 콤마로 빈 칸을 만들주면 빈 칸은 순서대로 배열의 값을 받지 않고 변수를 선언한 칸 부터 배열의 값을 받는다는 의미이다.

 

 

 

활용

 

var a = 10
var b = 20
var c = a
a = b
b = c
console.log(a, b)
/////


let a = 10;
let b = 20;
[a, b] = [b, a]
console.log(a, b)

값을 교환할때 헷갈리지 않게 간단하게 코드를 작성할 수 있다.

 

 

 

//rest parameter 와의 연동

const arr = [1, 2, 3, 4, 5]
const [ a, ...b ] = arr
const [ , , ...c ] = arr
console.log(a, b, c)




//default parameter와의 연동

const [a = 10, b = 20] = [undefined, 5]
const [c, d = c * 2] = [5]
const [e = f, f] = [undefined, 10]




//다차원 배열에서

const arr = [1, [2, [3, 4], 5], 6]
const [a, [b, [ , c], ], d] = arr
console.log(a, b, c, d)

 

위와 같이 다양하게 변수의 배열을 활용할 수 있다. 중요하게 알아야 할 점은 변수이름의 배열과 배열간의 칸 수가 매칭에 주의한다는 것이다.

 

 

 

 

 

 

 

 

 

객체의 해체할당

 

 

 

{추출할 프로퍼티명 : 할당하고자 하는 변수명}

const i = {
  name : 'jinseok',
  age : 25,
  gender : 'male'
}
const {
  name: n,
  age: a,
  gender: g
} = i
console.log(n, a, g)

//결과: jinseok 25 male

 

할당할 변수명은 생략 가능. (property shorthand)

const i = {
  name : 'jinseok',
  age : 25,
  gender : 'male'
}
const {
  name,
  age,
  gender
} = i

 

위의 코드처럼 객체에 '= (할당할 객체의 변수명)'을 해주면 객체 할당 작업이 가능해진다.

 

 

 

const i = {
  name : 'jinseok',
  age : 25,
  gender : 'male'
}
const {
  name,
  gender
} = i
console.log(name, gender)

 

발췌 또한 가능하다.

 

 

 

 

 

활용

 

const loginInfo = {
  device: {
    createdAt: '2017-12-06T00:14:04+0000',
    deviceId: '0000000000004Vx',
    deviceType: 'desktop'
  },
  user: {
    createdAt: '2017-03-08T18:00:28+0000',
    email: 'k0502s@naver.com',
    name: '김진석',
    nickname: 'k0520s',
    phoneNumber: '010-7921-7741'
  }
}

const {
  device,
  user: {
    name,
    nickname,
    phoneNumber: phone
  }
} = loginInfo

 

  • device는 device 객체 그 자체이다.
  • user : {} 는 user 객체 안에 있는 값들을 뽑아낸다는 의미이다. 
  • phoneNumber : phone 중에 선언된 변수는 phone이다. 즉  'const phone ='으로 phoneNumber의 변수로서 선언할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

default parameter와의 연동

 

const phone = {
  name : 'iPhone',
  color : undefined
}

const {
  name: n,
  version: v = '6+',
  color: c = 'silver'
} = phone
console.log(n, v, c)

const {
  name,
  version = 'X',
  color = 'black'
} = phone
console.log(name, version, color)

//결과: 
//iPhone 6+ silver
//iPhone X black

 

 

 

 

 

 

 

 

 

 

default parameter실무 활용

 

const deliveryProduct = {
  orderedDate: '2018-01-15',
  estimatedDate: '2018-01-20',
  status: '배송중',
  items: [
    {name: '사과', price: 1000, quantity: 3},
    {name: '배', price: 1500, quantity: 2},
    {name: '딸기', price: 2000, quantity: 4}
  ]
}

const {
  estimatedDate: esti,    //  estimatedDate을 esti로 변수 선언해주었다.
  status,                 // status는 객체 프로퍼티 자체를 지정.
  items: [ , ...products] // item의 첫 번째 프로퍼티 사과를 제외한 배, 딸기를 products로 지정함.
} = deliveryProduct
console.log(esti, status, products)


//결과:
//2018-01-20 배송중 (2) [{…}, {…}]
//0: {name: "배", price: 1500, quantity: 2}
//1: {name: "딸기", price: 2000, quantity: 4}

 

 

  • 위의 코드를 보면 배달목록에 대한 정보를 필요할 때마다 손 쉽게 수정하여 객체 정보를 바꿀 수 있다는 것을 알 수 있다.

 

 

 

 

 

 

 

const getArea = (info) => {
  const {width, height} = info
  return width * height
}
getArea({ width: 10, height: 50 })


/////


const getArea = ({ width, height = width }) => {
  return width * height
}
getArea({ width: 10 })

 

  • 에로우 함수의 매개변수를 더 효율적으로 사용할 수 있다. 변수 이름에도 객체가 들어 갈 수 있다는 점을 활용하여 에로우 함수 매개변수에 원하는 객체를 직접 넣어주었으며 default parameter을 활용할 수도 있다. 
  • 수정도 용이하며 원하는 값을 자유자재로 수정할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'프로그래밍 개발 > JS ES6+' 카테고리의 다른 글

Javascript ES6+ Set  (0) 2020.12.16
Javascript ES6+ 심볼(Symbol)  (0) 2020.12.15
Javascript ES6+ Function 함수  (0) 2020.12.14
Javascript ES6+ Arrow Function  (0) 2020.12.11
Javascript ES6+ 객체의 향상된 기능들  (0) 2020.12.11

댓글