📦

Group By

Group By - Explanation

보통 객체 O(n) O(n)

Problem Summary

Write a function that groups array elements by a given key.

Go to Problem →

Detailed Explanation

이 문제는 **데이터 그룹화** 패턴을 학습합니다. SQL의 GROUP BY와 유사한 기능으로 데이터 분석에 필수적입니다. **그룹화란?** 특정 속성 값에 따라 요소들을 분류하는 것입니다. **알고리즘 동작** 1. 각 요소의 키 값을 추출 2. 해당 값을 가진 그룹이 없으면 생성 3. 요소를 해당 그룹에 추가 **groups[value] = groups[value] || []** - 그룹이 없으면 빈 배열 생성 - 이미 있으면 기존 배열 유지 **[{age:20}, {age:20}, {age:30}] 처리** 1. {age:20}: groups={20: [{age:20}]} 2. {age:20}: groups={20: [{age:20}, {age:20}]} 3. {age:30}: groups={20: [...], 30: [{age:30}]} **Object.groupBy (최신 API)** 최신 JavaScript에는 내장 groupBy가 있습니다: `Object.groupBy(arr, item => item[key])` 하지만 아직 모든 환경에서 지원되지 않습니다. **실용적 활용** ```javascript const usersByCountry = groupBy(users, 'country'); const ordersByStatus = groupBy(orders, 'status'); ```

Solution Code

solution.js
function groupBy(arr, key) {
  return arr.reduce((groups, item) => {
    const value = item[key];
    groups[value] = groups[value] || [];
    groups[value].push(item);
    return groups;
  }, {});
}

Key Concepts from This Problem

1. 그룹화 패턴
2. reduce로 객체 생성
3. 동적 키 접근
4. || 연산자

Common Mistakes

그룹 배열 초기화를 잊으면 push에서 에러가 납니다
키 값이 undefined면 "undefined" 문자열 그룹이 생깁니다
groups를 return하지 않으면 undefined가 됩니다

Hints

Hint 1: reduce를 사용하세요.
Hint 2: 각 그룹을 배열로 만드세요.

Complexity Analysis

Time Complexity

O(n)

Grows linearly with input size

Space Complexity

O(n)

Uses memory proportional to input size

Related Tags

#객체 #reduce #그룹화