Object.assign()
// Object.assign() // 객체 복제
const user = {
name : 'Mike',
age : 30,
[1+4]:5, // 이렇게 식 자체를 넣는 것도 가능하다.
["안녕"+"하세요"] : "Hello"
}
const cloneUser = user; // 이러면 복제가 될까? 안된다!
//user 변수에는 객체 자체가 들어가 있는게 아니다.
//객체가 저장되어 있는 메모리의 주소, 객체에 대한 참조값이 저장된다.
//즉, 이런 클론유저는 객체가 복사되는게 아니라 참조값만 복사되는 거다.
console.log(user.name) // 'Mike'
cloneUser.name = 'Tom';
console.log(user.name) // 'Tom' // 아래에서는 user.name도 바뀐다!
//하나의 객체를 두 변수가 접근하고 있는 것이다.
const newUser = Object.assign({}, user)
// 첫번째 빈 객체는 초기값, 두번째 매개변수부터 들어오는 객체들이 초기값에 병합된다.
// 빈객체에 user가 들어오므로, 복제되는 거지.
newUser.name = 'Anakin'
console.log(user.name); // Tom
// 이제는 newUser의 이름을 바꿔도 원래 user이름에 변화가 없다.
const cloneUser2 = Object.assign({gender:'male'},user); // 성별값이 있는 객체가 user를 병합한다.
//name, age 까지 총 5개의 property를 가지게 된다.
console.log(cloneUser2)
//{ '5': 5, gender: 'male', name: 'Tom', age: 30, '안녕하세요': 'Hello' }
const cloneUser3 = Object.assign({name:'Luke'},user); //만약 병합을 하는데, key 가 같다면 어떻게 될까?
console.log(cloneUser3)
// { '5': 5, name: 'Tom', age: 30, '안녕하세요': 'Hello' } 걍 덮어씌운다.
// 여러 객체 병합 가능
const user = {
name : 'Mike'
}
const info1 = {
age : 30,
}
const info2 = {
gender : 'shemale'
}
const Anakin = Object.assign(user, info1, info2) // user에 info1, info2 병합
console.log(Anakin) // { name: 'Mike', age: 30, gender: 'shemale' }
Object.keys() Object.values() Object.entries() Object.fromEntries(배열)
const user = {
name : 'Mike',
age : 30,
gender : 'male',
}
console.log(Object.keys(user)) // Object.keys 메서드는 객체 property의 key를 배열로 반환한다.
//[ 'name', 'age', 'gender' ]
console.log(Object.values(user)) // 반대로. Object.values 메서드는 value를 배열로 반환한다.
//[ 'Mike', 30, 'male' ]
console.log(Object.entries(user)) // key value 배열 반환
//[ [ 'name', 'Mike' ], [ 'age', 30 ], [ 'gender', 'male' ] ]
const arr = [
["name", 'Mike'],
["age", 30],
["gender", 'male'],
]
console.log(Object.fromEntries(arr)) // 반대로, key value 배열을 객체로
// { name: 'Mike', age: 30, gender: 'male' }
const arr2 = [
['mon', '월'],
['tue', '화'],
];
const result = Object.fromEntries(arr2);
console.log(result); // { mon: '월', tue: '화' }
어떤 key가 들어올지 모르는 객체를 만들어야 할 때
// 어떤게 key 가 될지 모르는 객체를 만들 때 유효하다!!!
function makeObj(key, val){
return {
[key] : val
}
}
const obj = makeObj('나이', 33); // 요렇게 위의 함수를 사용할 수 있다.
console.log(obj) // { '나이': 33 }
const obj2 = makeObj('이름', 33); // 요렇게 위의 함수를 사용할 수 있다.
console.log(obj2) // { '이름': 33 }