문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열을 리턴해야 합니다.
function letterCapitalize(str) {
// TODO: 여기에 코드를 작성합니다.
/**
* 1.문자열을 입력받는다.
* 2.문자열의 각 단어에 접근한다.
* - str을 split을 이용해 배열로 바꾼다.
* 3.각 단어의 첫 번째 문자를 대문자로 바꾼다.
* - arr[i][0]가 각 단어의 첫 번째 단어다.
* - arr[i][0]을 toUpperCase를 이용해 바꾸고 나머지는 slice를 이용해 복사해온다.
* - newArr을 join()을 이용해 string으로 다시 바꾼다.
* 4.바꾼 문자열을 return 한다.
* - newArr 을 리턴한다.
*
*/
if(str.length === 0){
return '';
}
const newStr = str.split(' ');
const newArr = newStr.map(function(ele){
if(ele === ''){
return ele.toUpperCase();
}
return ele[0].toUpperCase() + ele.slice(1);
});
function letterCapitalize(str) {
let words = str.split(' ');
for (let i = 0; i < words.length; i++) {
if (words[i].length > 0) {
words[i] = words[i][0].toUpperCase() + words[i].substr(1);
}
}
str = words.join(' ');
return str;
}
내가 푼 코드에서 str.split(' ')
했을 때 const newStr === ['','','abc',''..];
이렇게 저장이 된다. 그 후 newStr.map()
을 적용하여 각 요소에 접근해 ele[0].toUpperCase()
를 적용하려고 했다. 하지만 계속해서 undefined
가 나왔고 이유를 찾아보니 newStr
의 첫 번째 요소인 ''
부분은 ele
그 자체였고 ele[0]
으로 접근할 경우 undefined
값이 나오는 것이었다.
값이 없으니 당연히 undefined
가 나와는게 맞았다.
그래서 map()
안에서 분기를 나눠 ''
인 경우와 아닌 경우로 나눠서 처리를 해줬다.
레퍼런스 코드를 보면 str
을 배열 words
로 만들어준 이후 words[i].length > 0
을 이용해 ''
부분을 걸러내고 문자열이 있는 요소에만 대문자로 바꿔주었다. 그 이후 words.join()
을 이용해 기존에 요소들을 문자열로 연결시켜주었다. 레퍼런스 코드가 더 간단하고 가독성이 좋다.