개요
이번 글에서는 문자열을 입력받아 인접한 두 단어의 위치를 서로 교환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.
예를 들어, 입력 문자열이 다음과 같다면 −
const str = "This is a sample string only";
출력 결과는 아래와 같아야 합니다 −
"is This sample a only string"
구현 방법
이 문제는 split() 메서드로 문자열을 단어 배열로 분리한 뒤, reduce()를 활용해 짝수 인덱스의 단어와 그 다음 단어의 순서를 바꿔가며 새로운 문자열을 조립하는 방식으로 해결할 수 있습니다.
예제 코드
다음은 전체 구현 코드입니다 −
const str = "This is a sample string only";
const replaceWords = str => {
return str.split(" ").reduce((acc, val, ind, arr) => {
if(ind % 2 === 1){
return acc;
}
acc += ((arr[ind+1] || "") + " " + val + " ");
return acc;
}, "");
};
console.log(replaceWords(str));
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
is This sample a only string
코드 동작 원리
- split(" "): 문자열을 공백을 기준으로 분리하여 각 단어로 이루어진 배열을 생성합니다.
- reduce() 순회: 배열을 순회하면서 홀수 인덱스(
ind % 2 === 1)인 경우에는 건너뛰고, 짝수 인덱스에서 현재 단어와 그 다음 단어의 순서를 서로 바꿔 누적 문자열에 추가합니다. - 예외 처리:
arr[ind+1] || ""부분은 단어의 개수가 홀수일 때 마지막 인덱스 이후의 값이undefined가 되는 것을 방지하기 위해 빈 문자열로 대체 처리합니다.
이러한 방식으로 별도의 임시 변수 없이도 함수형 프로그래밍 스타일로 인접 단어 교환이 가능합니다.