Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 문자열의 각 단어를 반전시키는 방법

JavaScript에서 문자열을 다루다 보면 문장 전체가 아닌 각 단어의 철자 순서만 반전해야 하는 경우가 있습니다. 이번 글에서는 문자열을 입력받아 원본 문자열의 모든 단어를 반전시킨 새로운 문자열을 반환하는 함수를 작성하는 방법을 알아보겠습니다.

문제 정의

예를 들어, 다음과 같은 문자열이 있다고 가정해 보겠습니다.

const str = 'this is a sample string';

이때 각 단어의 철자만 뒤집고 단어의 순서는 그대로 유지해야 하므로, 기대하는 출력 결과는 다음과 같습니다.

const output = 'siht si a elpmas gnirts';

해결 접근 방식

이 문제는 다음 세 단계로 해결할 수 있습니다.

1. 공백(" ")을 기준으로 split() 메서드를 사용해 문자열을 단어 배열로 분리합니다.
2. map()으로 각 단어를 순회하며, 단어를 개별 문자 배열로 분리한 뒤 reverse()로 반전하고 join()으로 다시 합칩니다.
3. 처리된 단어들을 공백으로 연결하여 최종 문자열을 반환합니다.

구현 코드

위 로직을 화살표 함수(arrow function)로 구현하면 다음과 같습니다.

const str = 'this is a sample string';

const reverseWords = str => {
  let reversed = '';
  reversed = str.split(" ")
    .map(word => {
      return word
        .split("")
        .reverse()
        .join("");
    })
    .join(" ");
  return reversed;
};

console.log(reverseWords(str));

코드 설명

str.split(" ")은 문자열을 공백 기준으로 나누어 ['this', 'is', 'a', 'sample', 'string'] 배열을 만듭니다. 이후 map() 내부에서 각 단어에 대해 split("")으로 문자 하나하나를 분리하고, reverse()로 순서를 뒤집은 후 join("")으로 다시 문자열로 합칩니다. 마지막으로 모든 단어를 join(" ")으로 공백과 함께 연결하여 결과를 완성합니다.

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

siht si a elpmas gnirts

마무리

이처럼 split(), map(), reverse(), join() 메서드를 조합하면 별도의 반복문 없이 간결하게 문자열의 단어를 반전시킬 수 있습니다. 참고로 한글처럼 조합형 문자나 이모지 등 서러게이트 페어(surrogate pair)가 포함된 문자열에는 reverse() 대신 스프레드 연산자([...word].reverse().join(''))를 사용하는 것이 더 안전합니다.