💻 Dev

🛠️ 처음부터 만드는 GroupBy — 배열을 기준에 따라 그룹화하기

# GroupBy: 배열을 기준에 따라 그룹화하기
실제 서비스에서 데이터를 정렬하거나 분류할 때, "같은 카테고리끼리 묶기", "날짜별로 나누기" 같은 요청이 자주 나옵니다. 바로 GroupBy가 필요한 순간입니다.

기본 구현


```javascript
const groupBy = (array, keyFn) => {
return array.reduce((acc, item) => {
const key = typeof keyFn === 'function' ? keyFn(item) : item[keyFn];
if (!acc[key]) acc[key] = [];
acc[key].push(item);
return acc;
}, {});
};
```

실제 사용 예제


```javascript
const users = [
{ id: 1, name: 'Alice', role: 'admin' },
{ id: 2, name: 'Bob', role: 'user' },
{ id: 3, name: 'Carol', role: 'admin' },
];
// 1. 문자열 키로 그룹화
const byRole = groupBy(users, 'role');
console.log(byRole);
// { admin: [...], user: [...] }
// 2. 함수로 그룹화 (더 복잡한 로직)
const logs = [
{ timestamp: 1000, status: 200 },
{ timestamp: 2000, status: 404 },
{ timestamp: 3000, status: 200 },
];
const byStatus = groupBy(logs, log => log.status);
// { '200': [...], '404': [...] }
```

심화: Map 버전


객체 키가 복잡하면 Map을 쓰는 게 더 안전합니다.
```javascript
const groupByMap = (array, keyFn) => {
const map = new Map();
array.forEach(item => {
const key = typeof keyFn === 'function' ? keyFn(item) : item[keyFn];
if (!map.has(key)) map.set(key, []);
map.get(key).push(item);
});
return map;
};
```

주의점


  • 대용량 배열: 수백만 개 이상이면 성능 테스트 필수

  • 키 충돌: 숫자 vs 문자('1' vs 1) — 필요하면 `String(key)`로 통일

  • Lodash: `_.groupBy()`도 같은 기능을 제공하니 참고
  • 💬 0
    👁 0 views

    Comments (0)

    💬

    No comments yet.

    Be the first to comment!