Object.entries(obj)๋Š” ๊ฐ์ฒด(Object)๋ฅผ [key, value] ํ˜•ํƒœ์˜ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ˆœํšŒํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•ด์•ผ ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.


๐Ÿงฉ ๊ธฐ๋ณธ ๊ฐœ๋…

const user = {
  name: "ํ™๊ธธ๋™",
  age: 30,
  job: "๊ฐœ๋ฐœ์ž"
};

const entries = Object.entries(user);

console.log(entries);

์ถœ๋ ฅ ๊ฒฐ๊ณผ ๐Ÿ‘‡

[
  ["name", "ํ™๊ธธ๋™"],
  ["age", 30],
  ["job", "๊ฐœ๋ฐœ์ž"]
]

์ฆ‰, ๊ฐ์ฒด โ†’ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
์ด ๊ตฌ์กฐ ๋•๋ถ„์— map(), filter(), for...of ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿง  ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ •๋ฆฌ

์ƒํ™ฉ ์„ค๋ช… ์˜ˆ์‹œ
๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ˆœํšŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ฐ์ฒด์˜ key์™€ value๋ฅผ ํ•จ๊ป˜ ๋‹ค๋ฃจ๊ณ  ์‹ถ์„ ๋•Œ for...of, forEach
๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋กœ ๊ฐ€๊ณตํ•˜๊ณ  ์‹ถ์„ ๋•Œ map(), filter(), reduce()์™€ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜
๊ฐ์ฒด๋ฅผ JSON ํ˜•ํƒœ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ ํ›„ ์กฐ์ž‘, ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ณต์› Object.fromEntries()
React ๋“ฑ์—์„œ key-value ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ {Object.entries(obj).map(...)} key-value๋ฅผ UI๋กœ ๋ณ€ํ™˜

1๏ธโƒฃ ๊ฐ์ฒด๋ฅผ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•  ๋•Œ

const user = { name: "Tom", age: 25, job: "๊ฐœ๋ฐœ์ž" };

for (const [key, value] of Object.entries(user)) {
  console.log(`${key}: ${value}`);
}

์ถœ๋ ฅ:

name: Tom
age: 25
job: ๊ฐœ๋ฐœ์ž

๐Ÿ’ก ๊ฐ์ฒด๋Š” ์ง์ ‘ for...of๋กœ ๋Œ๋ฆด ์ˆ˜ ์—†์ง€๋งŒ,
Object.entries()๋กœ ๋ฐ”๊พธ๋ฉด ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ˆœํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


2๏ธโƒฃ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ

์˜ˆ: ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜

const user = { name: "Tom", job: "developer" };

const upper = Object.entries(user).map(([key, value]) => [key, value.toUpperCase()]);

console.log(upper);
// [["name", "TOM"], ["job", "DEVELOPER"]]

๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ณต์›ํ•˜๊ธฐ ๐Ÿ‘‡

const result = Object.fromEntries(upper);
console.log(result);
// { name: "TOM", job: "DEVELOPER" }

๐Ÿ’ก entries + fromEntries ์กฐํ•ฉ์€ ๊ฐ์ฒด โ†” ๋ฐฐ์—ด ๊ฐ„ ๋ณ€ํ™˜์˜ ํ•ต์‹ฌ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.


3๏ธโƒฃ ํŠน์ • ์กฐ๊ฑด์œผ๋กœ ๊ฐ์ฒด ํ•„ํ„ฐ๋งํ•  ๋•Œ

์˜ˆ: value๊ฐ€ ์ˆซ์ž์ธ ์†์„ฑ๋งŒ ๋‚จ๊ธฐ๊ธฐ ๐Ÿ‘‡

const data = { a: 1, b: "hello", c: 3, d: true };

const numbers = Object.fromEntries(
  Object.entries(data).filter(([key, value]) => typeof value === "number")
);

console.log(numbers);
// { a: 1, c: 3 }

๐Ÿ’ก entries + filter + fromEntries ์กฐํ•ฉ์€ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ œ(clean-up)ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


4๏ธโƒฃ React์—์„œ key-value ๋ฐ์ดํ„ฐ ๋ Œ๋”๋งํ•  ๋•Œ

const user = { name: "Jane", age: 29, city: "Seoul" };

function UserInfo() {
  return (
    <ul>
      {Object.entries(user).map(([key, value]) => (
        <li key={key}>
          <strong>{key}</strong>: {value}
        </li>
      ))}
    </ul>
  );
}

๐Ÿ’ก React์—์„œ Object.entries()๋Š” ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ์ŠคํŠธ UI๋กœ ๋ฐ”๊ฟ€ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


5๏ธโƒฃ ํ‚ค ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•  ๋•Œ

์˜ˆ: ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ์˜ ํ‚ค ์ด๋ฆ„์ด snake_case์ผ ๊ฒฝ์šฐ ๐Ÿ‘‡

const serverData = { first_name: "Tom", last_name: "Lee" };

const camelData = Object.fromEntries(
  Object.entries(serverData).map(([key, value]) => [
    key.replace(/_([a-z])/g, (_, c) => c.toUpperCase()), // snake โ†’ camel
    value
  ])
);

console.log(camelData);
// { firstName: "Tom", lastName: "Lee" }

๐Ÿ’ก ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ํ‚ค ์ด๋ฆ„์„ ๊ฐ€๊ณตํ•  ๋•Œ๋„ ํ™œ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


โœ… ์š”์•ฝ โ€” Object.entries(obj)๋ฅผ ์จ์•ผ ํ•  ๋•Œ

์ƒํ™ฉ ๋ชฉ์  ํ•จ๊ป˜ ์“ฐ๋ฉด ์ข‹์€ ํ•จ์ˆ˜
๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ for...of๋กœ key, value ์ ‘๊ทผ forEach()
๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๊ฐ€๊ณตํ•˜๊ณ  ์‹ถ์„ ๋•Œ map(), filter(), reduce() ์‚ฌ์šฉ ๊ฐ€๋Šฅ Object.fromEntries()
ํŠน์ • ์†์„ฑ๋งŒ ์ถ”์ถœ/์ œ๊ฑฐํ•˜๊ณ  ์‹ถ์„ ๋•Œ filter() ์กฐํ•ฉ Object.fromEntries()
๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ key ์ด๋ฆ„ ๋ณ€ํ™˜, value ๋ณ€๊ฒฝ map()
UI ๋ฆฌ์ŠคํŠธ ๋ณ€ํ™˜ ์‹œ React ๋“ฑ์—์„œ ๋ Œ๋”๋ง์šฉ ๋ฐฐ์—ด ์ƒ์„ฑ map()

๐Ÿ”š ๋งˆ๋ฌด๋ฆฌ

Object.entries()๋Š” ๋‹จ์ˆœํ•œ โ€œ๊ฐ์ฒด โ†’ ๋ฐฐ์—ด ๋ณ€ํ™˜๊ธฐโ€๊ฐ€ ์•„๋‹ˆ๋ผ,
๊ฐ์ฒด๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ˆœํšŒํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, ๊ตฌ์กฐ ๋ณ€ํ™˜, UI ๋ Œ๋”๋ง ๋“ฑ ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ ์ž์ฃผ ํ™œ์šฉ๋˜๋Š” ํ•„์ˆ˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค ๐Ÿš€