본문 바로가기
JSP/Muzi

[Javascript] 구조분해

by 미눅스[멘토] 2024. 8. 26.
728x90

간단요약... (그대로 복사해서 console 확인해보자)

<!DOCTYPE html>
<meta charset="UTF-8">
<script>
"use strict"
//미친듯이 남발되고 있음(꼬옥 연습)
let testArr = ["민우","졸림","잘래?"];
let [,name,...merong] = testArr;
console.log("check:", name, merong);

let who = {
    name:"민우",
    age: 30,
    song:"Gone"
}

let {age} = who;
//let who2 = {...who}; //객체 복사와같다, let who2 = who; 별명과 새로 생성은 전혀 다른 이야기 지금은 새로생성!
let who2 = {...who, name:"철이"} //객체 생성과 동시에 속성을 변경을 함.
//console.log(who2);
//console.log(who);

const objCopy = (pObj) =>{
    return {...pObj}; //객체 복사
}

let ori = {name:"강도", spec:"사기"};
let oriCp = objCopy(ori);
oriCp.spec = "탕진찜";

console.log(ori);
console.log(oriCp);
</script>

 


배열 구조분해 (그대로 복사해서 console 확인해보자)

<!DOCTYPE html>
<meta charset="UTF-8">
<script>
    
//배열 구조 분해 할당
console.group("배열 구조 분해 할당")
const animals = ["강아지", "고양이", "오리"];

//구조분해 할당
const [dog, cat, duck="꽥꽥", cow="소"] = animals;
//고양이가 필요 없는경우, 강아지와 오리만 뽑아오기
//const [dog, ,duck] = animals; 

//객체에 없는값이면 '='연산자를 이용해 기본값을 적용할 수 있다. 
console.log(duck ,cow)

//spread operator연산자 사용
const[ddog, ccat, ...rest] = animals;
console.log(ddog, ccat, rest);
console.groupEnd();

//TIP!!!
//*****************************************************TIP 1 Start*****************************************************************************
console.group("TIP 1 - 변수 값 교환하기");
let a = 1;
let b = 2;

/* 기존은 이렇게 바꿔야함 하지만 우리느 구조분해를 배웠기 떄문에 멋지게 바꿔볼 예정
let temp = a // temp =1
a = b; //a = 2
b = temp //b =1
console.log(a ,b)
*/

/*어때 이제 좀 멋있나??*/
[a , b] = [b, a];
console.log("a ->",a,"b->",b);
console.groupEnd();
//*****************************************************TIP 1 End************************************************************************

//*****************************************************TIP 2 Start**********************************************************************
console.group("TIP 2 - 함수에서 반환된 배열을 구조 분해 할당하기");
function getAnumals(){
    return ["강아지", "고양이", "오리"];
}

/* 기존에는 이렇게 멋없게 뽑아왓음 하지만!! BUT!! 그러나~~
const fAnumals = getAnimals();
const fDog = fAnumals[0];
const fCat = fAnumals[1];
*/

const [fDog, fCat] = getAnumals();
console.log(fDog, fCat);


console.groupEnd();
//*****************************************************TIP 2 End************************************************************************
</script>

 


객체 구조분해 할당 (그대로 복사해서 console 확인해보자)

<!DOCTYPE html>
<meta charset="UTF-8">
<script>


//객체 구조 분해 할당
console.group("객체 구조 분해 할당");
const aniumals = {
    dog : "강아지",
    cat : "고양이",
    duck : "오리",
}

/* 구식
const dog = animals.dog;
const cat = animals.cat;
const duck = animals.duck;
*/

const dog = "멍멍이";
//변수의 이름은 키값과 같아야함
//만약 키값으로 쓰려던 변수가 이미 있다면 dog:를 쓰지 못하나? 아니!! 쓸 수 있다
//dongaName으로 담아주겠다는 뜻이다
const {dog:dongName, cat ,duck="꽥괙", cow = "소"} = aniumals;

/*고양이와 강아지만 빼오깅
const {cat, dog} = aniumals; 
console.log(cat, dog);
*/
console.log(dog, cat ,duck);
console.log(dongName);
console.log(cow); //값이 없으면 기본값을 세팅해둔 "소" 가 출력됨

//spread operator연산자 사용하기
const {dog:ddog, ...arrayLest} = aniumals;
console.log(ddog, arrayLest);

console.groupEnd();

//TIP!!!
//*****************************************************TIP 1 Start*****************************************************************************
console.group("TIP 1 - 반복문에서 구조 분해 할당하기");
const users = [
    {name: "철수", age: 25},
    {name: "민우", age: 30},
];

/*구식*/
console.group("구식");
for(const user of users){
    console.log(user.name);
}
console.groupEnd();
/*구조분해 할당*/
console.group("구조분해 포문에 할당");
for(const {name} of users){
    console.log(name);
}
console.groupEnd();
console.groupEnd();
//*****************************************************TIP 1 End************************************************************************

//*****************************************************TIP 2 Start*****************************************************************************
console.group("TIP 2 - 함수의 매개변수로 전달된 객체를 구조 분해 할당하기");
const user = { name : "민우" ,age : 25};

function oldPrintUser(user){
    console.log(`${user.name}님은 ${user.age}살 입니다.`);
}
function destructuringPrintUser({name, age}){
    console.log(`${name}님은 ${age}살 입니다.`);
}

console.group("oldFunction");
oldPrintUser(user);
console.groupEnd();

console.group("destructuringFunction");
destructuringPrintUser(user);
console.groupEnd();

console.groupEnd();
//*****************************************************TIP 2 End************************************************************************

</script>