특정 키의 빈도를 포함하는 객체를 만들려고 한다.
나의 경우 여러가지의 DB에 접속해서 각각 데이터를 가져온 후 list에 담아준 상태인데
이름이 같은 사람끼리의 데이터를 갯수를 계산하여서 각각 사람마다 몇개의 글을 썼는지를 알고 싶었다.
그러기 위해서는 담아온 데이터를 redice를 사용해서 가져오려고한다
내가 가진 데이터는 user_id만을 list<map>
에 담아 가져왔다
let users = [
{ user_id: "AAA"},
{ user_id: "AAA"},
{ user_id: "BBB"},
{ user_id: "AAA"}
];
// 1
let groupById = users.reduce((acc, it) =>
({ ...acc, [it.user_id]: (acc[it.user_id] || 0) + 1 }),
{});
// 2
const groupById = users.reduce((acc, it) => {
acc[it.user_id] = (acc[it.user_id] || 0) + 1;
return acc;
}, {});
groupById is {"AAA": 3, "BBB": 1}
1번과 2번의 결과는 동일하다.
웹과 연동하여 다른곳에서 사용하려고 하니 ...
이 부분이 인식을 안해서 다른 2번 방법도 찾아 사용하였다.
참고문서
https://dongmin-jang.medium.com/javascript-15%EA%B0%80%EC%A7%80-%EC%9C%A0%EC%9A%A9%ED%95%9C-map-reduce-filter-bfbc74f0debd
https://socaeri.com/entry/JS-Javascript-Reduce%EB%A1%9C-%EB%B0%B0%EC%97%B4%EC%9D%98-%ED%95%A9-%EC%A4%91%EB%B3%B5-%EA%B0%AF%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0