Javascript destructng array and object.

 destructuring 은 구조화된 배열 또는 객체를 비구조화 시켜서 개별의 변수에 할당하는 것이다.

배열 또는 객체 리터럴에서 필요한 값을 추출할때 유리하다.


1
2
3
4
5
6
const arr = [2, 3, 4];
const a = arr[0];
const b = arr[1];
const c = arr[2];
 
const [x, y, z] = arr;
const [x , , z] = arr;
cs

일반적으로 배열의 값을 변수에 할당하는 방법으로 변수 마다 하나씩 배열의 값을 손수 할당해 주었다.

destructuring 에서는 배열의 값을 바로 할당할 수 있다.
x , y , z 에 각각 배열 0 ,1 ,2 번째 값이 할당돼 있는 것이다. 그리고 , , 으로 필요없는 값은 스킵 할 수 있다.

1
2
3
//Nested destructuring
const nested = [2, 4, [5, 6]];
const [i, , [j, k]] = nested;
cs

감싸져 있는 구조의 경우 다음과 같이 할당이 가능하다. 각각 i = 2 , j = 5 , k = 6 이 할당이 되어 있는 상태이다.

만약 없는 배열의 값을 가져오게 되는 경우는 undefined 를 가져오지만 디폴트 값을 설정해 줄 수도 있다.

1
2
//default value
const [p = 1, q = 1, r = 1] = [8, 9];
cs
 
배열의 세번째 값은 없다. 따라서 r 에는 undefined가 할당되어야 하지만 디폴트 값 설정으로 인해 r 에는 1이 할당된다.




객체의 desturcturing 에 대해 알아보겠다.
객체의 디스터럭쳐링을 위해선 프로퍼티의 이름이 필요하다.

1
2
3
4
5
6
7
8
9
10
11
const myself = {
  name: 'colin',
  family: ['me', 'father', 'mother', 'sister', 'dog'],
  parttimejob: {
    mon: {
      open: '18:80',
      close: '20:00',
    },
  },
  age: 22,
};
              cs

우선 myself 라는 객체를 만들고 이를 이용하겠다.

1
2
const { name, family, age } = myself;
console.log(name, family, age);
cs

name 그리고 family ,age 의 프로퍼티 값을 프로퍼티 이름으로 할당하였다. 새로운 변수에 할당하려면 어떻게 해야할까?

1
2
const { name: myname, age: myage, family: myfamily } = myself;
console.log(myname, myfamily, myage);
cs

객체 myself의 프로퍼티 이름 name의 값을 myname에 할당했다. 나머지 myage , myself 또한 마찬가지이다.


//Mutating variables
let a = 12;
let b = 10;

const obj = { a: 20, b: 19, c: 18 };
({ a, b } = obj);
console.log(a, b);

변수를 바꿀 때에도 사용할 수 있다. 이때 중괄호를 괄호로 묶은 이유는 중괄호가 첫 줄로 오게 되면 코드 블럭으로 인식하기 때문에 나름에 꼼수를 사용한 것이다.

1
2
3
4
5
6
7
8
9
10
11
//object in array
const {
  family: [i, , j],
} = myself;
console.log(i, j);
 
//object in object
const {
  parttimejob: { open: o, close: c },
} = myself;
 
                    Colored by Color Scripter
                               cs

객체 안의 객체 , 배열에 디스터럭쳐링 하는 방법이다.


만약 없는 특성값을 객체에서 가져오게 되면 어떻게 될까 마찬가지로 undefined를 가져오겠지만 이때에도 디폴트 값을 설정하는 방법이 있다.
 

1
2
//delfault
const {girlfriend = []} = myself;
                                    cs

myself 에는 girlfriend 라는 특성이 없다. 따라서 undefined가 할당되어야하지만 위 코드와 같이 디폴트 값을 설정할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
introduce: function ({ myname, myage, myfamilyindex }) {
console.log(
 `my name is ${myname} and ${myage} years old, i love ${this.family[myfamilyindex]}`
    );
};
 
myself.introduce({
  myage: 21,
  myname: 'jiji',
  myfamilyindex: 2,
});
cs
 
introduce 가 myself의 매쏘드라고 생각하고 보자. 인자를 객체로 작성한 사실을 볼 수 있다.
이는 destructuring 을 이용하여 작성한 방식으로 api 를 이용할때 강력한 능력을 가진다.

즉,
{ myname, myage, myfamilyindex }={myage: 21,myname: 'jiji',myfamilyindex: 2,}

위 코드와 같은 역할을 한다. 


























댓글

이 블로그의 인기 게시물

Javascript this keyward

Javascript Object vs Primitives (Primitives vs reference type)

javascript 15 switch statement