영어 알파벳으로 이루어진 문자열을 입력받아, 그 안에 포함된 모음(vowel)과 자음(consonant)의 개수를 객체 형태로 반환하는 JavaScript 함수를 작성해 보겠습니다.
이 문제는 split()으로 문자열을 개별 문자 배열로 나눈 뒤, reduce()를 활용해 각 문자를 순회하면서 카운트를 누적하는 방식으로 간결하게 해결할 수 있습니다.
예제 코드
전체 코드는 다음과 같습니다.
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));코드 설명
- str.split('') — 문자열을 한 글자씩 분리한 배열로 만듭니다.
- reduce() — 초기값
{ vowels: 0, consonants: 0 }에서 시작해 각 문자를 처리하며 카운트를 누적합니다. - val.toLowerCase() === val.toUpperCase() — 공백이나 쉼표처럼 알파벳이 아닌 문자는 대소문자 변환 결과가 서로 같으므로, 이 조건으로 걸러내어 건너뜁니다.
- legend.includes(val.toLowerCase()) — 대소문자 구분 없이 모음('aeiou')에 포함되는지 확인하여, 모음이면
vowels를, 아니면consonants를 증가시킵니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
{ vowels: 17, consonants: 29 }이처럼 reduce()를 활용하면 별도의 반복문 변수 없이도 선언적으로 문자 내 모음·자음 개수를 깔끔하게 집계할 수 있습니다.