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

JavaScript로 단어 순서는 유지하면서 각 단어만 뒤집는 방법

문제 개요

문자열을 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 문자열 내 각 단어를 뒤집되, 단어들이 나열된 전체 순서는 원래 그대로 유지해야 합니다.

여기서 '단어'란 양쪽이 공백으로 둘러싸여 있거나, 한쪽은 공백이고 다른 쪽은 문자열의 시작 또는 끝에 닿아 있는 부분 문자열을 의미합니다. 함수는 최종적으로 변환된 새 문자열을 반환해야 합니다.

예시

입력 문자열이 다음과 같다면 −

const str = 'This is a string';

기대하는 출력 결과는 다음과 같습니다 −

const output = 'sihT si a gnirts';

'This', 'is', 'a', 'string'이라는 단어들은 각각 뒤집혔지만, 단어 사이의 배치 순서는 그대로 유지된 것을 확인할 수 있습니다.

구현 예제

const str = 'This is a string';
const reverseWords = (str = '') => {
    const reversed = [];
    str.split(" ").forEach(el => {
        let wordReversed = "";
        for (let i = el.length - 1; i >= 0; i--){
            wordReversed += el[i];
        };
        reversed.push(wordReversed);
    });
    return reversed.join(" ");
};
console.log(reverseWords(str));

출력 결과

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

sihT si a gnirts

코드 동작 원리

위 코드의 처리 과정을 단계별로 살펴보면 다음과 같습니다.

1. 단어 분리: str.split(" ")를 사용해 입력 문자열을 공백 기준으로 나누어 단어 배열을 만듭니다. 예제에서는 ['This', 'is', 'a', 'string'] 배열이 생성됩니다.

2. 각 단어 뒤집기: forEach로 각 단어를 순회하면서, 해당 단어의 마지막 글자부터 첫 글자까지 역순으로 한 글자씩 이어 붙여 새로운 뒤집힌 단어를 만듭니다.

3. 다시 결합: 뒤집힌 단어들을 reversed 배열에 차례대로 저장한 뒤, join(" ")으로 공백을 사이에 두고 하나의 문자열로 합쳐 반환합니다.

더 간결한 대안 방법

내장 메서드를 활용하면 같은 로직을 훨씬 짧은 코드로 작성할 수도 있습니다.

const reverseWords = (str = '') =>
  str.split(' ')
     .map(word => word.split('').reverse().join(''))
     .join(' ');

각 단어를 split('')으로 글자 배열로 만든 후 reverse()로 뒤집고, join('')으로 다시 문자열로 합치는 방식입니다. 가독성이 좋아 실무에서도 널리 사용되는 패턴입니다.