"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'
속성을 기준으로 그룹화하고, 그 결과를 출력하는 예시입니다.
const _ = require('lodash');
: 먼저 lodash 모듈을 가져옵니다.
const data = [...]
: 그룹화할 데이터가 담긴 배열을 정의합니다.
const groupedData = _.groupBy(data, 'category');
: groupBy
메소드를 호출하여 데이터를 'category'
속성을 기준으로 그룹화합니다. 반환되는 groupedData
객체는 각 카테고리를 키로, 해당 카테고리에 속하는 요소들의 배열을 값으로 갖습니다.
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
함수는 다음과 같이 두 가지 인자를 받습니다:
members
배열) - 그룹화할 원본 데이터가 포함된 배열입니다.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
객체는 입력 데이터를 월별로 그룹화하여 나타냅니다. 이를 통해 더 쉽게 월별 데이터를 처리하거나 분석할 수 있습니다.