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 ๋ ๋๋ง ๋ฑ ์ค์ ๊ฐ๋ฐ์์ ์์ฃผ ํ์ฉ๋๋ ํ์ ๋ฉ์๋์
๋๋ค ๐
๋ต๊ธ ๋จ๊ธฐ๊ธฐ