2. 문자열의 각 단어 첫 글자를 대문자로 변환

Mono crom·2021년 1월 8일
0

입력되는 문자열에는 두 번 이상 연속된 공백이 포함되어 있다.

공백이야 그렇다 쳐도, 문자열이 변경 불가능(immutable)하다는 점을 유의해서 풀지 않으면 아무리 이리저리 해봐도 입력된 문자열이 하나도 안 바뀐 채 그대로 리턴되어 가슴이 매우 답답해질 것.


Way

function letterCapitalize(str) {

  let arr = str.split(' ');
  let result = [];

  for(let i = 0; i < arr.length; i++) {
    if(arr[i].length > 0) {
      result[i] = arr[i][0].toUpperCase() + arr[i].slice(1);
    } else {
      result[i] = arr[i];
    }
  }

  let returnedStr = result.join(' ');
  return returnedStr
}

console.log(letterCapitalize(' nEVER  gIVE uP ')) // ' NEVER  GIVE UP '

Explanation

  1. 문자열 상태에서는 백날 지지고 볶아봐도 대문자로 안 바뀐다. 객체와 배열을 제외한 모든 자료형, 가령 string, number, boolean, undefined 같은 것들은 변경 불가능(immutable) 하기 때문이다. 그래서 split() 메서드를 사용해 공백 한 칸을 기준으로 배열에 나눠 담는다.

  2. 그리고 for문을 돌리는데, 이 배열의 요소 중에는 공백도 포함되어 있으므로 공백은 빼고 문자열 요소에만 대문자화를 적용해야 오류가 생기지 않을거다. arr.split(' ') 가 이중공백에 적용되면 빈 문자열이 배열에 추가되므로, arr[i]의 length 가 0을 초과하는지를 판단하는 것으로 문자열 요소만 걸러낼 수 있다.

  3. arr[i]의 첫 글자만 똑 떼서(arr[i][0]) 대문자로 바꾸고, 여기에 arr[i]에서 0번 인덱스만 뺀 사본을 만들어서(arr[i].slice(1)) 이걸 뒤에 붙여준다. 그리고 요걸 result 의 i번째 인덱스에 담아넣는다. 좋아!

  4. 배열의 요소가 비어 있으면 비어있는 대로 result[i]에 담는다. 나중에 join 할 때 다시 공백으로 뿅 돌아올거다.

  5. 완성된 result 배열을 join(' ')을 사용해서 다시 문자열 형태로 변환한다. 완성!

profile
니가 진짜로 원하는게 뭐야

0개의 댓글