JS에서 어떤 데이터를 표현하는 객체의 형태를 변경하는 일은 매우 자주 있고 이에 대한 코드를 작성하는 것은 한번 정도는 도전 정신이 발휘 되기도 하지만 그 다음부터는 짜증스럽기도 합니다. 아래와 같은 데이터가 있다고 가정해 봅시다.
[
{ name: "Jim", age: 48, sex: "F" },
{ name: "Kyle", age: 28, sex: "M" },
{ name: "Sally", age: 28, sex: "F" },
{ name: "Jane", age: 32, sex: "M" },
{ name: "Tom", age: 48, sex: "F" }
]
이 데이터의 필드 중 sex는 성별을 나타내는 것으로 이를 기준으로 데이터를 다음처럼 구성하려고 합니다.
{
"F": [
{"name":"Jim","age":48,"sex":"F"},
{"name":"Sally","age":28,"sex":"F"},
{"name":"Tom","age":48,"sex":"F"}
],
"M": [
{"name":"Kyle","age":28,"sex":"M"},
{"name":"Jane","age":32,"sex":"M"}
]
}
데이터의 표현을 F, M으로 구분해 다시 구성한 형태입니다. 이를 위한 목적을 이루기 위해 JS는 하나의 API 제공하고 있는데 다음과 같습니다.
const people = [
{ name: "Jim", age: 48, sex: "F" },
{ name: "Kyle", age: 28, sex: "M" },
{ name: "Sally", age: 28, sex: "F" },
{ name: "Jane", age: 32, sex: "M" },
{ name: "Tom", age: 48, sex: "F" }
]
const groupBySex = Object.groupBy(people, person => {
return person.sex
})
Object.groupBy가 핵심인데 이 API는 입력 데이터는 변경하지 않고 새로운 데이터를 만들어 반환합니다.