이번 글에서는 문자열을 입력받아 각 단어의 마지막 모음을 제거한 새로운 문자열을 반환하는 JavaScript 함수를 작성해 보겠습니다.
예를 들어 다음과 같은 문자열이 있다고 가정해 봅시다.
const str = 'This is an example string';
그렇다면 기대되는 출력 결과는 다음과 같습니다.
const output = 'Ths s n exampl strng';
접근 방법
각 단어에서 마지막으로 등장하는 모음(a, e, i, o, u)의 위치를 찾은 뒤, 해당 위치의 문자만 잘라내면 됩니다. 이를 위해 lastIndexOf() 메서드를 활용하고, 여러 모음의 인덱스 중 가장 큰 값, 즉 가장 뒤에 있는 모음의 위치를 선택하는 것이 핵심입니다.
코드 구현
위 로직을 구현한 코드는 다음과 같습니다.
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));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
Ths s n exampl strng
코드 동작 원리
removeLast 함수는 하나의 단어를 받아 각 모음이 마지막으로 나타나는 위치를 lastIndexOf()로 확인한 후, 그중 가장 큰 값을 Math.max()를 통해 구합니다. 이후 해당 인덱스 앞부분과 뒷부분을 이어 붙여 마지막 모음이 제거된 단어를 완성합니다.
removeLastVowel 함수는 전체 문자열을 공백을 기준으로 분리한 뒤, reduce()를 사용해 각 단어에 removeLast를 적용하고, 처리된 단어들을 다시 공백으로 연결하여 최종 결과 문자열을 반환합니다.