Problem
- Complete the function that accepts a string parameter, and reverses each word in the string.
- All spaces in the string should be retained.
Solution 01
function reverseWords(str) {
let result = '';
for (let i = str.length - 1; i >= 0; i--) {
result += str[i];
}
return result.split(' ').reverse().join(' ');
}
reverseWords('a b c d'); // a b c d
reverseWords('How are you?'); // woH era ?uoy
split()
: 문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.
reverse()
: 배열 내 element의 순서를 반전한다.
join()
: 배열의 모든 element를 결합하고, 새 문자열로 반환한다.
Solution 02
function reverseWords(str) {
return str.split(' ').map(i => i.split('').reverse().join('')).join(' ');
}
reverseWords('a b c d'); // a b c d
reverseWords('How are you?'); // woH era ?uoy
map()
: 배열 내 모든 element에 대해, 호출한 함수의 결과를 모아 새 배열로 반환한다.
Solution 03
function reverseWords(str) {
return str.replace(/\S+/g, i => [...i].reverse().join(''));
}
reverseWords('a b c d'); // a b c d
reverseWords('How are you?'); // woH era ?uoy
replace()
: 대응되는 문자열을 찾아 다른 문자열로 치환한다.
\s
: 하나의 공백에 대응
\S
: 공백이 아닌, 하나의 문자에 대응
+
: 1회 이상 연속으로 반복되는 부분에 대응
g
: 전역 검색