🛠️ 처음부터 만드는 GroupBy — 배열을 기준에 따라 그룹 나누기
GroupBy란?
배열의 원소들을 특정 기준으로 분류해서 객체 형태의 그룹으로 만드는 함수입니다.
```javascript
const users = [
{ name: 'Alice', role: 'admin' },
{ name: 'Bob', role: 'user' },
{ name: 'Charlie', role: 'admin' },
];
const grouped = groupBy(users, user => user.role);
// {
// admin: [{ name: 'Alice', ... }, { name: 'Charlie', ... }],
// user: [{ name: 'Bob', ... }]
// }
```
구현하기
기본 버전 — reduce로 한 번에 처리:
```javascript
function groupBy(arr, keyFn) {
return arr.reduce((acc, item) => {
const key = keyFn(item);
if (!acc[key]) acc[key] = [];
acc[key].push(item);
return acc;
}, {});
}
```
TypeScript 버전 — 타입 안전:
```typescript
function groupBy
arr: T[],
keyFn: (item: T) => K
): Record
return arr.reduce((acc, item) => {
const key = keyFn(item);
if (!acc[key]) acc[key] = [];
acc[key].push(item);
return acc;
}, {} as Record
}
```
응용: 값도 변환하기
그룹화하면서 값도 변환해야 할 때:
```javascript
function groupByAndMap(arr, keyFn, mapFn) {
return arr.reduce((acc, item) => {
const key = keyFn(item);
if (!acc[key]) acc[key] = [];
acc[key].push(mapFn(item));
return acc;
}, {});
}
const names = groupByAndMap(
users,
u => u.role,
u => u.name
);
// { admin: ['Alice', 'Charlie'], user: ['Bob'] }
```
핵심 포인트
📚 관련 문서: [MDN — Array.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) | [Lodash groupBy](https://lodash.com/docs/#groupBy)
👁 0 views
Comments (0)
💬
No comments yet.
Be the first to comment!