이번 글에서는 문자열을 입력받아 각 단어의 마지막 모음(vowel)을 제거한 새로운 문자열을 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.
예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.
const str = 'This is an example string';
이때 기대되는 출력 결과는 다음과 같습니다.
const output = 'Ths s n exampl strng';
문제 해결 접근 방식
이 문제는 다음과 같은 순서로 해결할 수 있습니다.
- 문자열을 공백을 기준으로 분리하여 단어 배열을 만듭니다.
- 각 단어에서 모음(a, e, i, o, u)이 마지막으로 등장하는 인덱스를 찾습니다.
- 해당 인덱스의 문자를 제거한 뒤 나머지 부분을 다시 조합합니다.
- 처리된 단어들을 공백으로 연결하여 최종 문자열을 반환합니다.
예제 코드
다음은 위 로직을 구현한 전체 코드입니다.
const str = 'This is an example string';
const removeLast = word => {
const lastIndex = el => word.lastIndexOf(el);
const ind = Math.max(lastIndex('a'), lastIndex('e'), lastIndex('i'),
lastIndex('o'), lastIndex('u'));
return word.substr(0, ind) + word.substr(ind+1, word.length);
}
const removeLastVowel = str => {
const strArr = str.split(' ');
return strArr.reduce((acc, val) => {
return acc.concat(removeLast(val));
}, []).join(' ');
};
console.log(removeLastVowel(str));코드 설명
removeLast 함수는 하나의 단어를 받아 lastIndexOf() 메서드로 각 모음이 마지막으로 나타나는 위치를 확인한 뒤, Math.max()를 통해 그중 가장 큰 인덱스, 즉 가장 뒤에 있는 모음의 위치를 찾습니다. 이후 해당 위치의 문자를 제외하고 앞부분과 뒷부분을 이어 붙여 새로운 단어를 만들어 반환합니다.
removeLastVowel 함수는 전체 문장을 split(' ')으로 공백 단위로 분리한 후, reduce()를 사용해 각 단어에 removeLast 함수를 적용합니다. 마지막에는 처리된 단어들을 join(' ')으로 다시 공백으로 연결하여 완성된 문자열을 반환합니다.
참고로 substr()은 현재 폐기(deprecated)된 메서드이므로, 실무에서는 slice()나 substring()을 사용하는 것이 좋습니다. 예를 들어 word.slice(0, ind) + word.slice(ind + 1)처럼 작성하면 동일한 결과를 얻을 수 있습니다.
출력 결과
콘솔에 출력된 실행 결과는 다음과 같습니다.
Ths s n exampl strng