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

JavaScript 배열에서 가장 많이 나타나는 값(최빈값) 구하는 방법

반복되는 값을 포함하는 리터럴 배열을 입력받아, 그중 가장 자주 등장하는 요소(최빈값)를 반환하는 JavaScript 함수를 작성해야 합니다.

만약 두 개 이상의 요소가 동일한 최대 횟수로 나타난다면, 해당 요소들을 모두 배열에 담아 함께 반환해야 합니다.

동작 원리

이 함수는 다음과 같은 단계로 동작합니다.

1. 빈 객체(count)를 만들고, forEach로 배열을 순회하며 각 요소가 등장한 횟수를 기록합니다.
2. Object.keys()로 요소 목록을 가져온 뒤, reduce를 사용해 최대 빈도를 가진 요소(들)를 추출합니다.
3. 현재 요소의 빈도가 지금까지의 최댓값보다 크면 결과를 새로 시작하고, 같으면 기존 결과 배열에 추가합니다.

예제 코드

const arr1 = ["a", "c", "a", "b", "d", "e", "f"];
const arr2 = ["a", "c", "a", "c", "d", "e", "f"];
const getMostCommon = arr => {
    const count = {};
    let res = [];
    arr.forEach(el => {
        count[el] = (count[el] || 0) + 1;
    });
    res = Object.keys(count).reduce((acc, val, ind) => {
        if (!ind || count[val] > count[acc[0]]) {
            return [val];
        };
        if (count[val] === count[acc[0]]) {
            acc.push(val);
        };
        return acc;
    }, []);
    return res;
}
console.log(getMostCommon(arr1));
console.log(getMostCommon(arr2));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

[ 'a' ]
[ 'a', 'c' ]

첫 번째 배열에서는 'a'가 2번으로 가장 많이 등장하므로 ['a']가 반환되고, 두 번째 배열에서는 'a'와 'c'가 각각 2번씩 등장하여 동률이므로 두 요소가 모두 포함된 ['a', 'c']가 반환됩니다.