const obj = {
data: {
id: 1,
title: "제목",
date: "2022-08-01"
}
}
const { data: entry } = obj;
console.log(data); // Uncaught ReferenceError: data is not defined
console.log(entry); // { id: 1, ... }
객체 구조분해 할당을 사용해 객체 obj의 data 속성을 변수 data로 할당해줄 수 있음. 하지만, 속성명과 동일한 변수명을 쓰지 않고 내가 원하는 변수명을 지정해줄 수는 없을까? 배열은 그 자체로 내가 원하는 변수명을 지정해줄 수 있지만 객체는 그렇게는 할 수 없음. { 속성명: 새 변수명 } 형태로 구조분해 할당을 하면 가능함. 객체의 속성명과 동일한 변수가 이미 존재할 때, 해당 변수명을 수정하지 않고 이 방법을 쓰면 좋음.
※ Typescript에서 객체의 타입을 { data: Array<string>, others: Array<number> }처럼 정의해줄 수 없는 이유가 이것 때문!
3. 다차원 객체의 구조분해 할당
다차원 객체의 구조분해도 동일한 방식으로 가능하지만 변수로 할당할 속성의 상위 속성명은 반드시 명시해줘야 함.
객체 구조분해 할당
구조 분해 할당
ko.javascript.info
1. 구조분해 할당(Destructuring Assignment)
배열, 객체 구조분해 할당의 기본적인 사용법은 위와 같음.
2. 원하는 속성을 다른 변수명으로 지정하기
객체 구조분해 할당을 사용해 객체 obj의 data 속성을 변수 data로 할당해줄 수 있음. 하지만, 속성명과 동일한 변수명을 쓰지 않고 내가 원하는 변수명을 지정해줄 수는 없을까? 배열은 그 자체로 내가 원하는 변수명을 지정해줄 수 있지만 객체는 그렇게는 할 수 없음. { 속성명: 새 변수명 } 형태로 구조분해 할당을 하면 가능함. 객체의 속성명과 동일한 변수가 이미 존재할 때, 해당 변수명을 수정하지 않고 이 방법을 쓰면 좋음.
※ Typescript에서 객체의 타입을 { data: Array<string>, others: Array<number> }처럼 정의해줄 수 없는 이유가 이것 때문!
3. 다차원 객체의 구조분해 할당
다차원 객체의 구조분해도 동일한 방식으로 가능하지만 변수로 할당할 속성의 상위 속성명은 반드시 명시해줘야 함.
구조분해 할당을 할 객체가 위와 같은 형태일 때, discussions 속성을 분해해서 가져오고 싶다면, 아래와 같이 구조분해 할당을 사용해야 함.
첫번째가 안 되는 것은 객체 data 안의 { discussions }가 어떤 속성의 값인지 정해지지 않았기 때문. 한편, 두번째에서 repository는 내부 속성명이기 때문에 discussions 변수만 정의되고,
repository는 정의되지 않은 상태임에 주의![참고]
How to Destructure Nested JavaScript Objects
'JavaScript' 카테고리의 다른 글