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

JavaScript 배열에서 반복되는 이름의 등장 횟수 계산하기

객체 배열에서 특정 값이 몇 번 반복되는지 세어야 하는 경우가 자주 있습니다. 이번 글에서는 JavaScript의 reduce() 메서드를 활용해 학생 배열에서 반복되는 이름의 등장 횟수를 계산하는 방법을 알아보겠습니다.

예제 데이터

다음과 같은 학생 정보 배열이 있다고 가정해 보겠습니다.

var details = [
    {
        studentName: "John",
        studentAge: 23
    },
    {
        studentName: "David",
        studentAge: 24
    },
    {
        studentName: "John",
        studentAge: 21
    },
    {
        studentName: "John",
        studentAge: 25
    },
    {
        studentName: "Bob",
        studentAge: 22
    },
    {
        studentName: "David",
        studentAge: 20
    }
]

목표 결과

배열에서 반복되는 이름별로 등장 횟수를 집계하면 최종 출력은 다음과 같아야 합니다.

John: 3
David: 2
Bob: 1

reduce()로 해결하기

reduce() 메서드는 배열의 각 요소를 순회하면서 누적값(accumulator)을 만들어가는 함수형 메서드입니다. 여기서는 빈 객체를 초기 누적값으로 설정하고, 각 학생의 이름(studentName)을 키로 사용해 등장 횟수를 누적합니다. 마지막으로 Object.values()로 객체의 값들만 추출하여 원하는 형태의 배열을 얻습니다.

전체 코드

var details = [
    {
        studentName: "John",
        studentAge: 23
    },
    {
        studentName: "David",
        studentAge: 24
    },
    {
        studentName: "John",
        studentAge: 21
    },
    {
        studentName: "John",
        studentAge: 25
    },
    {
        studentName: "Bob",
        studentAge: 22
    },
    {
        studentName: "David",
        studentAge: 20
    }
]
var output = Object.values(details.reduce((obj, { studentName }) => {
    if (obj[studentName] === undefined)
        obj[studentName] = { studentName: studentName, occurrences: 1 };
    else
        obj[studentName].occurrences++;
    return obj;
}, {}));
console.log(output);

코드 동작 원리

  • 구조 분해 할당: { studentName }을 통해 각 객체에서 이름만 바로 추출합니다.
  • 첫 등장 처리: 해당 이름이 누적 객체에 없으면(undefined) 새 항목을 만들고 occurrences를 1로 초기화합니다.
  • 중복 처리: 이미 존재하는 이름이라면 occurrences 값을 1씩 증가시킵니다.
  • 결과 변환: Object.values()를 사용해 키-값 객체를 배열 형태로 변환합니다.

실행 방법

Node.js 환경에서 위 프로그램을 실행하려면 다음 명령어를 사용합니다.

node fileName.js

여기서는 파일 이름이 demo282.js라고 가정합니다. 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

PS C:\Users\Amit\javascript-code> node demo282.js
[
    { studentName: 'John', occurrences: 3 },
    { studentName: 'David', occurrences: 2 },
    { studentName: 'Bob', occurrences: 1 }
]

마무리

이처럼 reduce()Object.values()를 조합하면 별도의 외부 라이브러리 없이도 배열 내 중복 값의 개수를 간결하게 집계할 수 있습니다. 이 패턴은 이름뿐 아니라 카테고리, 태그 등 다양한 문자열 값의 빈도수 계산에도 그대로 응용할 수 있습니다.