lodash groupby

agnusdei·2023년 8월 9일
0
post-custom-banner

"lodash"는 JavaScript 유틸리티 라이브러리로, 다양한 유용한 기능을 제공하는데, 이 중 하나가 groupBy 메소드입니다. 이 메소드를 사용하면 배열의 요소를 지정한 조건에 따라 그룹화할 수 있습니다. 간단한 설명과 함께 코드 예시와 분석을 제공하겠습니다.

groupBy 메소드 개요

groupBy 메소드는 두 개의 인자를 받습니다: 배열과 그룹화할 기준 함수입니다. 이 메소드는 배열을 순회하면서 각 요소를 기준 함수에 전달하고, 기준 함수의 반환값에 따라 요소들을 그룹화합니다. 반환값이 같은 요소들은 같은 그룹으로 묶이게 됩니다. 그 결과로 객체 형태로 각 그룹이 표현됩니다.

코드 예시

아래는 groupBy 메소드의 코드 예시입니다.

const _ = require('lodash');

const data = [
  { id: 1, category: 'A' },
  { id: 2, category: 'B' },
  { id: 3, category: 'A' },
  { id: 4, category: 'C' },
  { id: 5, category: 'B' }
];

const groupedData = _.groupBy(data, 'category');

console.log(groupedData);

위의 코드는 data 배열을 'category' 속성을 기준으로 그룹화하고, 그 결과를 출력하는 예시입니다.

코드 분석

  1. const _ = require('lodash');: 먼저 lodash 모듈을 가져옵니다.

  2. const data = [...]: 그룹화할 데이터가 담긴 배열을 정의합니다.

  3. const groupedData = _.groupBy(data, 'category');: groupBy 메소드를 호출하여 데이터를 'category' 속성을 기준으로 그룹화합니다. 반환되는 groupedData 객체는 각 카테고리를 키로, 해당 카테고리에 속하는 요소들의 배열을 값으로 갖습니다.

  4. console.log(groupedData);: 그룹화된 데이터를 콘솔에 출력합니다.

결과

위의 코드 예시에서 groupedData 객체는 다음과 같은 형태로 나타날 것입니다.

{
  'A': [
    { id: 1, category: 'A' },
    { id: 3, category: 'A' }
  ],
  'B': [
    { id: 2, category: 'B' },
    { id: 5, category: 'B' }
  ],
  'C': [
    { id: 4, category: 'C' }
  ]
}

결과적으로 각 카테고리에 해당하는 요소들이 그룹화되어 표시됩니다.

이렇듯 groupBy 메소드는 배열을 그룹화하는 강력한 도구로, 데이터 분석이나 처리 작업에서 매우 유용하게 사용될 수 있습니다.

// lodash 라이브러리 불러오기
const _ = require('lodash');

// 입력 데이터
const members = [
  { createdAt: '2023-08-08T01:20:51.202Z' },
  { createdAt: '2023-08-08T01:20:30.793Z' },
  // ... (나머지 데이터)
];

// 사용된 lodash의 groupBy 함수
const userResult = _.groupBy(members, (member) =>
  dayjs(member.createdAt).format('YYYY-MM')
);

// 결과 출력
console.log('userResult :: ', userResult);

위 코드에서 groupBy 함수는 다음과 같이 두 가지 인자를 받습니다:

  1. 첫 번째 인자: 배열 (members 배열) - 그룹화할 원본 데이터가 포함된 배열입니다.
  2. 두 번째 인자: 함수 (grouping 함수) - 각 요소를 그룹화하기 위한 기준을 정의하는 함수입니다.

groupBy 함수는 배열을 그룹화하여 객체 형태로 반환합니다. 반환된 객체의 각 속성은 그룹의 키가 되고, 해당 키에 속하는 원본 데이터 요소들의 배열이 값으로 할당됩니다.

위 코드에서 grouping 함수는 다음과 같이 작성되었습니다:

(member) => dayjs(member.createdAt).format('YYYY-MM')

이 함수는 createdAt 날짜 값을 받아서 해당 날짜의 'YYYY-MM' 형식으로 변환합니다. 이를 통해 날짜를 월 단위로 그룹화합니다. 따라서 결과적으로 userResult 객체는 월별로 그룹화된 데이터를 가지게 됩니다.

예시를 통해 설명하면, 위 코드의 userResult 객체는 다음과 같은 형태로 나올 것입니다:

{
  '2023-08': [
    { createdAt: '2023-08-08T01:20:51.202Z' },
    { createdAt: '2023-08-08T01:20:30.793Z' },
    // ... (나머지 8월 데이터)
  ],
  '2023-07': [
    { createdAt: '2023-07-09T05:10:49.086Z' }
  ]
}

결과적으로 userResult 객체는 입력 데이터를 월별로 그룹화하여 나타냅니다. 이를 통해 더 쉽게 월별 데이터를 처리하거나 분석할 수 있습니다.

post-custom-banner

0개의 댓글