JavaScript

[JavaScript] 객체 메소드 - Object.assign(), Object.keys(), Object.values(), Object.entries(), Object.fromEntries() / 계산된 프로퍼티 (Computed Property)

김도유 2022. 9. 15. 13:46
let a = 'age';
const user = {
	name : 'Mike',
   	 age : 30 // [a] : 30
}

a변수와 user객체가 있다.

 

let a = 'age';
const user = {
	name : 'Mike',
    	[a]: 30    // age : 30
}

여기서, age키 대신 [a] 로 사용해도 된다.

대괄호[ ]로 묶어주면 문자열a가 아닌, 변수a에 할당된 값이 들어간다. 

이를 계산된 프로퍼티(Computed Property)라고 한다.

 

//계산된 프로퍼티(Computed Property)
const user = {
	[1 + 4] : 5,
    ["안녕"+"하세요"] : "Hello"
}

// {5: 5, 안녕하세요: "Hello"}

위처럼 식자체를 넣는 것도 가능하다.

 

다음은, 객체에서 사용할 수 있는 몇가지 메소드를 알아보자.

1. Object.assign() : 객체 복제

const user = {
	name : 'Mike',
   	 age : 30
}

user객체가 있을 때,

const user2 = user;

user2를 만들어 user를 넣어주면 복제가 가능할까?

정답은 '그렇지않다.'

 

const user2 = user;
user2.name = "Tom";

console.log(user);
console.log(user2);

// {name: "Tom", age: 30} -- user 
// {name: "Tom", age: 30} -- user2

user변수에는 객체자체가 들어가있는게 아니라, 객체의 참조값이 저장된다.

즉, 객체가 복제되는것이 아니라 참조값이 복제되는 것이다.

user와 user2 둘 다 하나의 객체를 참조하기 때문에 user2의 이름을 변경했을 때, user의 이름도 변경된다.

 

동일하게 복제하려면 Object.assign() 메소드를 사용해야 한다.

{ } 빈객체는 초기값이다. 두 번째 매개변수부터 들어온 객체들이 초기값에 병합된다.

이렇게하면, 빈객체에 user가 병합되므로 복제되는 것이다.

{ } + { name : 'Mike', age : } = { name : 'Mike,' age : 30 }

 

const user2 = Object.assign({}, user); 

user2.name = 'Tom';

console.log(user.name); // 'Mike'

user2 != user

Object.assign() 메소드로 복제하면, user2의 이름을 바꿔도 user의 이름은 변하지 않는다.

user2와 user는 같은 객체가 아니기때문이다.

 

 

 

 

Object.assign({ name: 'Tom' }, user);

만약, 병합을 할 때 키(name)가 같다면 어떻게 될까?

name : 'Tom',

name : 'Mike',

age : 30,

위와 같이 이름이 덮어씌워져 변경된다.

 

 

두 개 이상의 객체도 합칠 수 있다.

 

 

2. Object.keys() : 키 배열 반환

const user = {
   name : 'Mike',
    age : 30,
    gender : 'male',
}

Object.keys(user);
// ["name", "age", "gender"]

user 객체를 Object.keys의 인수로 전달하면 key들(name, age, gender)이 배열로 만들어 반환한다.

 

3. Object.values() : 값 배열 반환

Object.keys와 반대로 값들만 가져오고 싶다면 Object.values()메소드를 사용하면 된다.

객체의 value에 해당하는 'Mike', 30, 'male'만 배열로 반환된다.

const user = {
   name : 'Mike',
    age : 30,
    gender : 'male',
}

Object.values(user);
// ["Mike", 30, "male"]

 

4. Object.entries() : 키/값 배열 반환

키와 값을 모두 배열로 반환하는 메소드이다.

const user = {
   name : 'Mike',
    age : 30,
    gender : 'male',
}

Object.entries(user);
/* [ 
	 ["name", "Mike"],
        ["age", 30],
        ["gender", "male"]
    ]
*/

 

5. Object.fromEntries() : 키/값 배열을 객체로

Object.entries()메소드와 반대로, 키와 값을 쌍으로 묶은 배열들을 넣어주면 객체로 만들어준다.

const arr = 
[ 
  ["name", "Mike"],  // "name" : 키, "Mike" : 값
  ["age", 30],	   // "age" : 키, 30 : 값
  ["gender", "male"] //"gender" : 키, "male" : 값
];

Object.fromEntries(arr);

/*
{
 name : 'Mike',
 age : 30,
 gender : 'male',
} */

참고 및 출처 : 유투브 코딩앙마 https://youtu.be/4_WLS9Lj6n4