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; | 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,}
위 코드와 같은 역할을 한다.
댓글
댓글 쓰기