Object ์‹ฌํ™” ํ€ด์ฆˆ

1. ๊ฐ์ฒด obj๋ฅผ ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
const obj = { a: 1, b: { c: 2 } };
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
JSON.parse(JSON.stringify(obj))
const copy = JSON.parse(JSON.stringify(obj));
console.log(copy);
2. ๋‘ ๊ฐ์ฒด๊ฐ€ ๊ฐ’์ด ๊ฐ™์€์ง€ ์–•์€ ๋น„๊ต(shallow equal)ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
const a = { x: 1, y: 2 };
const b = { x: 1, y: 2 };
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
Object.keys, every, ===
function shallowEqual(obj1, obj2) {
  const keys1 = Object.keys(obj1);
  const keys2 = Object.keys(obj2);
  if (keys1.length !== keys2.length) return false;
  return keys1.every(k => obj1[k] === obj2[k]);
}
console.log(shallowEqual(a, b));
3. ๊ฐ์ฒด user์— getter/setter๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ age๊ฐ€ 0~120 ์‚ฌ์ด๋งŒ ํ—ˆ์šฉ๋˜๊ฒŒ ํ•˜์„ธ์š”.
const user = { _age: 20 };
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
Object.defineProperty ๋˜๋Š” get/set
Object.defineProperty(user, 'age', {
  get() { return this._age; },
  set(v) { if (v >= 0 && v <= 120) this._age = v; }
});
user.age = 130;
console.log(user._age); // 20
4. ๊ฐ์ฒด person์— sayHello ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹คํ–‰ํ•˜์„ธ์š”.
const person = { name: 'Ghost' };
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
person.sayHello = function() { ... }
person.sayHello = function() {
  console.log('์•ˆ๋…•ํ•˜์„ธ์š”, ' + this.name);
};
person.sayHello();
5. ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ User ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
function User(name, age) { ... }
function User(name, age) {
  this.name = name;
  this.age = age;
}
const u = new User('Ghost', 20);
console.log(u);
6. User ์ƒ์„ฑ์ž์— sayHello ๋ฉ”์„œ๋“œ๋ฅผ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
function User(name) { this.name = name; }
const u = new User('Ghost');
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
User.prototype.sayHello = ...
User.prototype.sayHello = function() {
  console.log('Hi, ' + this.name);
};
u.sayHello();
7. ๊ฐ์ฒด์˜ key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ๋งŒ๋“œ์„ธ์š”.
const obj = { b: 2, a: 1, c: 3 };
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
Object.keys(obj).sort()
console.log(Object.keys(obj).sort());
8. ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ age๋ฅผ 25๋กœ ๋ณ€๊ฒฝํ•œ ์ƒˆ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ์„ธ์š”.
const user = { name: 'Ghost', age: 20 };
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
const newUser = { ...user, age: 25 };
console.log(newUser);
9. ๊ฐ์ฒด obj์˜ ๋ชจ๋“  ๊ฐ’์ด true์ธ์ง€ ํŒ๋ณ„ํ•˜์„ธ์š”.
const obj = { a: true, b: true, c: false };
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
Object.values + every
console.log(Object.values(obj).every(Boolean));
10. ๊ฐ์ฒด obj์˜ key์™€ value๋ฅผ ๋’ค์ง‘์€ ์ƒˆ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ์„ธ์š”.
const obj = { a: 1, b: 2 };
// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
Object.entries + reduce
const swapped = Object.entries(obj).reduce((acc, [k, v]) => {
  acc[v] = k;
  return acc;
}, {});
console.log(swapped);