2022.04.26
구조 분해 할당(Destrucuring assignment). 비구조화 할당
객체데이터에서의 구조 분해 할당
const user = {
name: 'sunny',
age: 31
}
// user라는 객체데이터에서 내용을 구조 분해해서 내가 원하는 속성만 꺼내서 사용할 수 있음
// 구조분해한 내용을 변수로 만들어서 활용할 수 있음
const {name, age, email} = user
console.log(`이름:${name}`) //이름:sunny
console.log(`나이:${age}`) //나이:31
console.log(`이메일:${email}`) //이메일:undefined
//email부분에 기본값을 주고 싶다면? email변수부분에 default값 지정가능
const {name, age, email = 'hungry'} = user
console.log(`이름:${name}`) //이름:sunny
console.log(`나이:${age}`) //나이:31
console.log(`이메일:${email}`) //이메일:hungry
//변수 name이 마음에 안들면 콜론기호를 써서 변경 가능
const {name: hi, age, email = 'hungry' } = user
// name은 꺼내오는 용도, 꺼내온 내용을 hi라는 변수로 만듦
배열데이터에서의 구조 분해 할당
// 배열데이터에 전개연산자를 붙이면 배열데이터의 대괄호가 난라감
// 배열데이터가 가지고있는 괄호를 지워준다고 생각하면 편함
const users = ['Sunny', 'Jessie', 'Rosie']
// users가 배열이라는걸 알고 있기때문에 대괄호를 사용해 주면 됨
// 구조분해 데이터타입에 맞게 기호를 사용해주기
// 배열데이터는 순서대로 추출!
const [a, b, c, d] = users
console.log(a, b, c, d) //Sunny Jessie Rosie undefined
// Rosie만 추출하고 싶을 경우
// 배열데이터는 순서대로 추출!되기때문에 맞춰줘야함
const [, , c] = users
console.log(c) //Rosie
const a = {
x: 1,
y: 2
}
const b = {
y: 3,
z: 4
}
// 하나의 객체데이터 안에서 키는 고유함
const c = Object.assign({}, a, b)
console.log(c) //{x: 1, y: 3, z: 4}
const d = {
a,
b
}
console.log(d)
{
"a": {
"x": 1,
"y": 2
},
"b": {
"y": 3,
"z": 4
}
}
배열데이터 안에 있는 애들을 날려준다
const d = {
...a,
...b
}
console.log(d) //{x: 1, y: 3, z: 4}
const userA = {
name: 'Sunny',
age: 92,
isVaild: true
}
// 배열안에 배열이 있네 ? 2차원 배열
배열안에 배열아이템이 들어있음
const res = Object.entries(userA)
console.log(res)
[
[
"name",
"Sunny"
],
[
"age",
92
],
[
"isVaild",
true
]
]
for (const item of res) {
console.log(item)
}
['name', 'Sunny']
['age', 92]
['isVaild', true]
//객체데이터의 key value 형태가 배열형태로 나옴
console.log(item[0]) //key
console.log(item[1]) //value
// Object.entries는 2차원배열로 만들어줌
// 함수는 항상 실행된 데터 뭐 남으냐를 잘 봐함 그렇기 때문에 아래 for of문을 씀
// 즉,
for (const item of Object.entries(userA)) {
console.log(item[0]) // name age isVaild
console.log(item[1]) // Sunny 92 true
}
전개 연산자(Spread) 나머지매개변수
...가 전개 연산자 기호
배열데이터가 문자데이터 형태로 출력됨
배열데이터에 전개연산자를 붙이면 배열데이터의 대괄호가 날라감(배열데이터가 가지고있는 관호를 지워준다고 생각하면 편함)
const users = ['Sunny', 'Jessie', 'Rosie']
console.log(users) //['Sunny', 'Jessie', 'Rosie']
console.log(...users) //Sunny Jessie Rosie
console.log('Sunny', 'Jessie', 'Rosie') //Sunny Jessie Rosie
function toObject(a, b, c) {
return {
a: a,
b: b,
c: c
}
}
console.log(toObject(...users)) //{a: 'Sunny', b: 'Jessie', c: 'Rosie'}
console.log(toObject(users[0], users[1], users[2])) //{a: 'Sunny', b: 'Jessie', c: 'Rosie'}
const users = ['Sunny', 'Jessie', 'Rosie', 'Amy', 'Sarah']
//위에 toObject를 화살표함수로 축약함
const toObject = (a, b, ...c) => ({a, b, c})
//매개변수 부분에 전개연산자를 넣어주면 나머지 아이템들은 전부 c로 들어갈 수 있음 (=rest parameter 나머지 매개변수)
//매개변수에서 나머지값을 배열의형태로 받을 수 있음
console.log(toObject(...users))
//{a: 'Sunny', b: 'Jessie', c: Array(3)},
// c: (3) ['Rosie', 'Amy', 'Sarah']
const a = {
x: 1,
y: 2
}
const b = {
y: 3,
z: 4
}
// 하나의 객체데이터 안에서 키는 고유함
const c = Object.assign({}, a, b) =
console.log(c) //{x: 1, y: 3, z: 4}
const d = {
a,
b
}
console.log(d)
{
"a": {
"x": 1,
"y": 2
},
"b": {
"y": 3,
"z": 4
}
}
배열데이터 안에 있는 애들을 날려준다
const d = {
...a,
...b
}
console.log(d) //{x: 1, y: 3, z: 4}
전개연산자와 (객체)구조분해할당
const user = {
name: 'Sunny',
age: 92,
isValid: true
}
// const e = user.name
// const a = user.age
// const i = user.isValid
const { name: e, ...rest } = user
console.log(e, rest) //Sunny {age: 92, isValid: true}
'프론트엔드 > JavaScript' 카테고리의 다른 글
자바스크립트 콜스택(Call Stack) (0) | 2022.05.16 |
---|---|
자바스크립트 for문과 while문 (0) | 2022.05.15 |
자바스크립트 객체(Object)데이터 (0) | 2022.04.28 |
자바스크립트 날짜와 시간 (0) | 2022.04.27 |
자바스크립트 배열(Array)데이터 (0) | 2022.04.25 |