์ฌ์ฉ์์ ํ๋์ ๊ธฐ๋กํ๊ณ ์ถ์ ํ๋ ์์คํ
์ ๋ง๋ค์ด์ผ ํ์ต๋๋ค.
(login, viewPage, logout ๊ฐ์ ํ๋๋ค์ ์ค๋ณต ์์ด ๊ธฐ๋กํ๊ธฐ!)
์ฒ์์๋ ๋ง๋งํ์ง๋ง... Map๊ณผ Set์ ํ์ฉํ๋ ์๊ฐ๋ณด๋ค ๊น๋ํ๊ฒ ํด๊ฒฐ๋์ด์!
function createUserLogger() {
const userLogs = new Map(); // ์ฌ๋ฌ ์ฌ์ฉ์์ ๊ธฐ๋ก์ ๊ด๋ฆฌํ Map ์์ฑ!
function recordUserAction(userId, action) {
if(!userLogs.has(userId)) {
userLogs.set(userId, new Set()); // Set์ผ๋ก ์ค๋ณต ๊ธฐ๋ก ๋ฐฉ์ง
}
const actions = userLogs.get(userId);
actions.add(action);
}
function getUserActions(userId) {
const actions = userLogs.get(userId);
return actions ? [...actions] : [];
}
return { recordUserAction, getUserActions };
}
// ์์ ๋ฑ์ฅ ํ์ ์ธ๊ธฐ
arr.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1; // ์ด ๋ถ๋ถ์ด ์ ๋ง ์ ๊ธฐํ์ด์!
return acc;
}, {});
์ค๋์ ๊ฐ์ฅ ํฐ ๊นจ๋ฌ์์ด์๋ ๋ถ๋ถ! ๐ฒ
acc[cur] = (acc[cur] || 0) + 1
์ด๊ฒ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ์ ๋์ ๊ทธ ํฌ์ด์ด๋...!
์ฒ์ 'banana' ๋ฑ์ฅ
'melon' ๋ ๋ฒ์งธ ๋ฑ์ฅํ ๋๋
์... ์ ๋ง ์งง์ ์ฝ๋์์ง๋ง ์ด๋ ๊ฒ๋ ๋ฉ์ง ๋์์ ํ๋ค๋... ๐ฅน
Map๊ณผ Set์ด ์ด๋ด ๋ ์ง๊ฐ๋ฅผ ๋ฐํํ๋๊ตฌ๋
reduce๋ ์๊ฐ๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํ๋ค
์ค๋๋ ํ๋ ๋ฐฐ์๊ฐ๋๋ค. ๊ฐ์ด ์๋ ์ ์ ์ด์ฉํ์ฌ 0์ผ๋ก ํ ๋นํ ์ ์๋ค๋ ๊ฒ!
JavaScript๋ ๋ฐฐ์ธ์๋ก ๋ ์ฌ๋ฏธ์์ด์ง๋ ๊ฒ ๊ฐ์์ โจ