숫자나 문자열로 이루어진 배열에 중복된 값이 포함되어 있을 때, 각 요소가 몇 번 등장하는지 그 빈도를 구해야 하는 경우가 자주 있습니다. 이럴 때 가장 깔끔한 해결책은 요소를 키(key)로, 빈도를 값(value)으로 가지는 객체를 반환하는 것입니다.
구현 방법은 간단합니다. 먼저 forEach() 루프로 배열을 순회하면서, 해당 요소가 이미 객체에 존재하면 카운트를 1씩 증가시키고, 존재하지 않으면 새로운 속성을 만들어 값을 1로 초기화합니다.
마지막으로 완성된 객체를 반환하면 됩니다.
예제 코드
const arr = [2,5,7,8,5,3,5,7,8,5,3,4,2,4,2,1,6,8,6];
const getFrequency = (array) => {
const map = {};
array.forEach(item => {
if(map[item]){
map[item]++;
}else{
map[item] = 1;
}
});
return map;
};
console.log(getFrequency(arr));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
{ '1': 1, '2': 3, '3': 2, '4': 2, '5': 4, '6': 2, '7': 2, '8': 3 }참고: reduce()를 활용한 대안
같은 로직은 reduce() 메서드를 사용해 더 간결하게 작성할 수도 있습니다.
const getFrequency = (array) =>
array.reduce((map, item) => {
map[item] = (map[item] || 0) + 1;
return map;
}, {});두 방법 모두 시간 복잡도는 O(n)으로 동일하며, 상황에 맞게 선택해 사용하면 됩니다. 이 기법은 중복 제거, 최빈값 찾기, 데이터 집계 등 다양한 실무 문제에 활용될 수 있습니다.