문제 정의
영어 알파벳으로 구성된 문자열을 입력받아, 그 안에 포함된 모음(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 }