Title Case

Title Case

A string is considered to be in title case if each word in the string is either (a) capitalised (that is, only the first letter of the word is in upper case) or (b) considered to be an exception and put entirely into lower case unless it is the first word, which is always capitalised.

Write a function that will convert a string into title case, given an optional list of exceptions (minor words). The list of minor words will be given as a string with each word separated by a space. Your function should ignore the case of the minor words string -- it should behave in the same way even if the case of the minor word string is changed.

First argument (required): the original string to be converted. Second argument (optional): space-delimited list of minor words that must always be lowercase except for the first word in the string. The JavaScript/CoffeeScript tests will pass undefined when this argument is unused.

문제 문자열이 주어지면 title case로(첫 글자만 대문자) 변경하는 알고리즘을 구현하는 문제입니다. 단, 예외 단어가 함께 주어지고 예외 단어는 대문자로 변경하지 않습니다. 그리고 첫 단어는 항상 title case로 변경을 합니다.

저의 풀이 과정은 아래와 같습니다. - 주어진 string을 lower case로 변경하고, split을 이용해 단어 단위의 배열로 변경합니다. - 배열을 순차적으로 돌며, 예외 처리할 단어가 아니면 title case로 변경합니다. - 첫 단어는 title case로 변경합니다.

예외 처리할 단어를 배열로 저장할 수도 있었지만, 코드 읽기가 좀 더 쉬운것 같고 indexOf method를 사용하는 것 보다 나을 것 같아 객체로 저장을 했습니다.

function titleCase(title, minorWords = '') {
  if (title === '') {
    return title;
  }

  const titleArr = title.toLocaleLowerCase().split(' ');
  const exception = {};

  minorWords
    .toLocaleLowerCase()
    .split(' ')
    .forEach(cur => {
      exception[cur] = cur;
    });

  return titleArr
    .map((str, idx) => {
      if (!exception[str] || idx === 0) {
        return str[0].toLocaleUpperCase() + str.slice(1);
      }

      return str;
    })
    .join(' ');
}