JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
원래 처음에는 for문으로 풀려고 했으나.. 너무 복잡하고 런타임 에러까지 났다.. 일단 코드는 올려보겠다.
function solution(s) {
var answer = '';
answer = s.toLowerCase()
answer = answer.split(' ')
var result = '';
for(let i= 0; i < answer.length; i++){
let word = answer[i];
let fristString = word[0].toUpperCase(0)
let lastString = word.slice(1).toLowerCase();
let JadenCase = fristString + lastString;
result += JadenCase + ' ';
}
return result.trim();
}
결국 다른 방도를 찾아봐야 했고, 제일 간단하게 나온 해답이 밑에 있는 코드이다.
function solution(s) {
return s.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ')
}
map 함수를 사용하면 for문을 돌린 것과 같은 결과를 낳는다.
간단하게 map() 함수에 대해 리마인드 해보겠다.
map()은 배열을 순회하며 지정된 콜백 함수를 적용하여 각 요소를 변환하고, 그 변환된 값을 모아서 새로운 배열로 반환하는 역할을 수행한다.
Array.map(function(array){ }); 혹은 함수를 작성하는 대신 Array.map(x => x.~~); 이렇게 사용도 가능하다.
두 번째에서 x는 배열의 값을 말한다.
예를 들어 array=[1, 2, 3, 4, 5]가 있으면 x는 0번째부터 도는 배열이기 때문에 순서대로 1, 2, 3, 4, 5의 값을 가지게 된다. 그래서 array.map(x => x*2) 로 사용한다면 각각의 값에 2를 곱한 값이 저장되게 된다.
이 처럼 for문을 돌 필요 없이 간단하게 나타낼 수 있기 때문에 자주 사용된다.