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는 입력 데이터는 변경하지 않고 새로운 데이터를 만들어 반환합니다.