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

JavaScript로 문자열 속 모음과 자음 개수 세기

문제 정의

영어 알파벳으로 구성된 문자열을 입력받아, 그 안에 포함된 모음(vowels)자음(consonants)의 개수를 각각 계산한 뒤 객체 형태로 반환하는 JavaScript 함수를 작성해야 합니다.

예를 들어 다음과 같은 문자열이 주어졌다고 가정해 보겠습니다.

const str = 'This is a sample string, will be used to collect some data';

이 문자열에 대해 함수는 아래와 같은 결과를 반환해야 합니다.

{ vowels: 17, consonants: 29 }

예제 코드

다음은 위 문제를 해결하는 전체 코드입니다.

const str = 'This is a sample string, will be used to collect some data';
const countAlpha = str => {
   return str.split('').reduce((acc, val) => {
      const legend = 'aeiou';
      let { vowels, consonants } = acc;
      if(val.toLowerCase() === val.toUpperCase()){
         return acc;
      };
      if(legend.includes(val.toLowerCase())){
         vowels++;
      }else{
         consonants++;
      };
      return { vowels, consonants };
   }, {
      vowels: 0,
      consonants: 0
   });
};
console.log(countAlpha(str));

코드 동작 원리

이 코드가 어떻게 동작하는지 단계별로 살펴보겠습니다.

  • split('')을 사용해 문자열을 개별 문자로 이루어진 배열로 분리합니다.
  • reduce() 메서드로 각 문자를 순회하면서 초기값 { vowels: 0, consonants: 0 } 객체를 누적 업데이트합니다.
  • val.toLowerCase() === val.toUpperCase() 조건을 활용하면, 대소문자 변환 시 값이 달라지지 않는 문자 즉 공백이나 쉼표처럼 알파벳이 아닌 문자를 쉽게 걸러낼 수 있습니다.
  • 알파벳인 경우에는 'aeiou' 문자열에 포함되는지 확인하여 포함되면 모음 카운트를, 포함되지 않으면 자음 카운트를 1씩 증가시킵니다.

이 방식은 정규표현식 없이도 순수한 문자열 메서드만으로 깔끔하게 문제를 해결할 수 있다는 장점이 있습니다.

출력 결과

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

{ vowels: 17, consonants: 29 }