이번 튜토리얼에서는 문자열을 입력받아 홀수 개의 문자로 이루어진 단어만 골라 뒤집는 JavaScript 함수를 작성해 보겠습니다.
여기서 말하는 '단어'란 다음 조건 중 하나를 만족하는 부분 문자열을 의미합니다.
- 양쪽이 공백으로 둘러싸여 있는 경우
- 문자열의 시작 또는 끝에 위치하면서, 반대쪽이 공백으로 구분되는 경우
문제 예시
다음과 같은 문자열이 있다고 가정해 보겠습니다.
const str = 'hello beautiful people';
각 단어의 길이를 살펴보면 다음과 같습니다.
- hello → 5글자 (홀수)
- beautiful → 9글자 (홀수)
- people → 6글자 (짝수)
따라서 뒤집어야 할 대상은 hello와 beautiful 두 단어입니다.
구현 코드
이제 해당 기능을 수행하는 함수를 직접 작성해 보겠습니다.
const str = 'hello beautiful people';
// 문자열 길이가 홀수인지 판별하는 헬퍼 함수
const isOdd = str => str.length % 2 === 1;
// 홀수 길이의 단어만 뒤집는 메인 함수
const reverseOddWords = (str = '') => {
const strArr = str.split(' ');
return strArr.reduce((acc, val) => {
if (isOdd(val)) {
acc.push(val.split('').reverse().join(''));
return acc;
}
acc.push(val);
return acc;
}, []).join(' ');
};
console.log(reverseOddWords(str));코드 동작 원리
위 코드가 어떻게 동작하는지 단계별로 살펴보겠습니다.
- isOdd 함수: 문자열의 길이를 2로 나눈 나머지가 1인지 확인하여 홀수 여부를 판별합니다.
- split(' '): 입력된 문자열을 공백을 기준으로 분리해 단어 배열을 생성합니다.
- reduce 메서드: 각 단어를 순회하면서, 홀수 길이의 단어라면
split(''),reverse(),join('')을 연달아 호출해 문자를 역순으로 재배열한 뒤 결과 배열에 추가합니다. 짝수 길이의 단어는 그대로 유지됩니다. - join(' '): 처리가 완료된 배열을 다시 공백으로 연결해 최종 문자열을 반환합니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
olleh lufituaeb people
hello는 olleh로, beautiful은 lufituaeb로 뒤집혔고, 짝수 길이인 people은 그대로 유지된 것을 확인할 수 있습니다.
마무리
이처럼 split, reduce, reverse 같은 배열 메서드를 조합하면 복잡한 문자열 변환 로직도 간결하게 구현할 수 있습니다. 특정 조건(길이, 포함 문자 등)에 따라 단어를 선택적으로 가공해야 하는 다양한 상황에서 응용해 보시기 바랍니다.