본문 바로가기
기초다지기/JS 코딩테스트

javascript 모든 단어의 첫 문자를 대문자로, 나머진 소문자로 변환하기

by 김빵그 2023. 10. 26.

문제 

모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자로 리턴하여라 단 첫 문자가 알파벳이 아닐 때는 이어지는 알파벳은 소문자로 쓴다

나의 풀이 (틀린 해답 1) 

function solution(s) {
    return s.split(" ").map(word => 
    	word[0].toUpperCase() + word.slice(1).toLowerCase()
        ).join(" ");
}
  • split(" ") : 문자열 s를 공백을 기준으로 분리하여 배열로 반환
  • map() : 나눠진 문자열 배열의 각 요소에 대해 주어진 함수를 호출하고 새로운 배열로 반환하다
  • 각 요소의 첫번째 [0] 글자는 대문자화 시키고 그 나머지 slice 두번째 글자부터는 소문자화 시킨다
  • join(" ") : 배열의 모든 요소를 하나의 문자열로 결합

맞다고 생각한 답이 틀렸다니.. 뭔가 빼먹은게 있는건가

나의 풀이 2 

function solution(s) {
    return s.split(" ").map(word => {
        if(word === "") {
            return "";
        }else {
             return word[0].toUpperCase() + word.slice(1).toLowerCase();
        }
    }).join(" ");

}
  • 공백 부분도 처리 해줬더니 성공

다른 풀이

function solution(s) {
    return s.split(" ").map(v => v.charAt(0).toUpperCase() + v.substring(1).toLowerCase()).join(" ");
}
  • charAt 메서드를 사용하여 문자열에서 문자를 가져오는 데 더 명시적으로 표기한다 string[i] 와 charAt(i)의 차이를 알아야한다.
  • s.toLowerCase().split(" ").map(v => v[0].toUpperCase() + v.substring(1)).join(" ")는 안되고 charAt은 되는 걸까
  • 문제를 다시 보면 "s는 알파벳과 공백문자"" 로 이루어져 있습니다" 라고 되어있는데 이때 빈 문자열인데 (undefined) 0번째 인덱스에 접근 [0]! 한다는게 에러가 나서 틀린거 같다
  • https://phuoc.ng/collection/this-vs-that/string-char-at-vs-string-bracket-notation/
 

string.charAt(i) vs string[i] — Phuoc Nguyen

 

phuoc.ng