Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 배열의 모든 요소에 대한 빈도 맵 만들기

문제 개요

숫자나 문자열로 이루어진 배열에는 종종 중복된 항목들이 포함되어 있습니다. 이때 우리가 해야 할 일은 배열 안의 각 요소가 몇 번 등장했는지, 즉 빈도(frequency)를 계산하여 반환하는 것입니다.

이러한 문제에서는 각 요소를 키(key)로, 해당 요소의 등장 횟수를 값(value)으로 가지는 객체를 반환하는 방식이 가장 적합합니다.

해결 접근 방식

배열을 forEach() 루프로 순회하면서 다음과 같은 로직으로 처리합니다.

  • 객체에 해당 요소가 이미 존재한다면, 기존 카운트를 1 증가시킵니다.
  • 존재하지 않는다면, 해당 요소를 새로운 속성(property)으로 추가하고 값을 1로 설정합니다.

모든 요소의 순회가 끝나면 완성된 객체를 반환하면 됩니다. 시간 복잡도는 O(n)으로, 배열을 한 번만 순회하면 되기 때문에 매우 효율적입니다.

전체 코드

이 문제에 대한 전체 구현 코드는 다음과 같습니다.

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 }

추가 팁

ES6 이상 환경이라면 일반 객체 대신 Map 객체를 사용하는 것도 좋은 선택입니다. Map은 키의 삽입 순서를 유지하고, 객체와 달리 프로토타입 체인으로 인한 키 충돌(예: 'toString', 'constructor' 같은 키) 문제가 없어 더욱 안전합니다.