2016-08-03 2 views
-1

도와주세요. 나는 운동을하고 있고 모든 조건이 실행되면 내가 뭘 잘못하고 있는지 이해하지 못합니다. 이 작업은 각 단어의 첫 글자 만 대문자로 제공된 문자열을 반환하는 것으로 구성됩니다. 내 코드는이 조건을 수행하지만 앞서 나가지 않습니다.자바 스크립트에서이 작업을 수행하지 않습니다.

function titleCase(str) { 
var text = str.toLowerCase(); 
var arr = text.split(" "); 
var txt = " "; 
var i; 
for(i=0; i < arr.length; i++) { 
txt += arr[i][0].toUpperCase() + arr[i].slice(1) + " " ; 
} 
return txt; 
} 

titleCase("sHoRt AnD sToUt"); 
+3

당신이 앞설 수 없다는 뜻인가요? 코드가 제대로 작동합니다. – j08691

+1

'txt'에서 공백을 확인하십시오 – Andreas

답변

1

당신은 여분의 공백을 추가 (var txt = " "var text = ''해야한다), 대신이 시도 :

function titleCase(str) { 
 
var text = str.toLowerCase(); 
 
    
 
// split on spaces, map over array and return capitalized word and join on space 
 
return text.split(' ').map((word) => { 
 
    return word[0].toUpperCase() + word.slice(1); 
 
}).join(' '); 
 
} 
 

 
alert(titleCase("sHoRt AnD sToUt"));

0

당신의 목표는 첫 글자가 대문자로 다시 문자열을 반환하는 경우 , 출력물에 하나의 문제점이 있습니다. 당신은

"Short And Stout" 

를 반환해야하지만, 대신 당신은 전에 당신의 문자열 뒤에 공백으로

" Short And Stout " 

을 반환합니다. txt을 공백이 아닌 빈 문자열로 초기화 한 다음 루프 끝에서 마지막 공백을 잘라내거나 마지막 요소 인 arr에없는 경우에만 공백을 추가하여이 문제를 해결할 수 있습니다. 즉 :

var txt = ""; 
for(var i=0; i < arr.length; i++) { 
    txt += arr[i][0].toUpperCase() + arr[i].slice(1); 
    if (i != arr.length - 1) txt += " "; 
} 
+0

하, thanks @ andreas! 편집 됨. –

0

대신 정규 표현식을 사용할 수 있습니다.

function titleCase(txt){ 
    return txt.toLowerCase().replace(/\b\w/g, function(m){return m.toUpperCase();}); 
} 
console.log(titleCase("sHoRt AnD sToUt"));//"Short And Stout" 

몇 가지 설명.
// 정규 표현식 (정규식), 글로벌에 대한 g (다른 첫번째 만)
\b 단어 경계
\w 단어 기호 AZ (플러스 _)
m (함수 매개 변수)는 문자열에서 일치하는 일

관련 문제