2015-08-09 1 views
0

Так что я хочу загладить начальную букву каждого слова в строке. Вот как я это сделал:Почему я должен подтолкнуть свою строку в массив, чтобы снова присоединиться к ней?

function LetterCapitalize(str) { 
var arr = str.split(" "); 
var newArr = []; 
    for(i = 0; i < arr.length; i++) { 
    var newStr = arr[i].toString(); 
    newArr.push(newStr.substring(0,1).toUpperCase() + newStr.substring(1,newStr.length)); 
    } 
    return newArr.join(" "); 

} 

Этот код верен, и первая буква каждого слова в строке была заглавной. Однако, когда я пытался сократить свой код, как это, он вернулся только последнее слово строки с первой заглавной буквой, но ничего другого:

function LetterCapitalize(str) { 
var arr = str.split(" "); 
var newArr = []; 
    for(i = 0; i < arr.length; i++) { 
    var newStr = arr[i].toString(); 
    } 
    return newStr.substring(0,1).toUpperCase() + newStr.substring(1,newStr.length); 

} 

В общем, что я сделал было удалить ту часть, где я толкаю новую строку в новый массив, только чтобы присоединиться к ней обратно в строку.

+1

Прочтите два фрагмента кода еще раз. Следуйте своим действиям. Как они отличаются? Подсказка: в последнем случае строка с 'return' вызывается только один раз * для всей строки (с последним значением newStr); в то время как в первом случае капитализация делается для * каждого * отдельных слов, как разделение, а затем все отдельные капитализированные результаты снова объединяются. – user2864740

+0

Это потому, что вы всегда создаете новую переменную 'newStr'inside loop и берете последнюю, которую нужно вернуть. –

ответ

4

Проблема в коде части цикла for. Здесь на каждой итерации newstr получают значение arr[i].toString();, а старое значение i.e arr[i-1].toString();, которое находится в newStr, перезаписывается. Следовательно, только последнее значение итерации хранится в newStr

for(i = 0; i < arr.length; i++) { 
var newStr = arr[i].toString(); 
} 

Попробуйте это:

function LetterCapitalize(str) { 
 
var arr = str.split(" "); 
 
var newStr = ""; 
 
for(i = 0; i < arr.length; i++) { 
 
    var temp = arr[i].toString(); 
 
    newStr = newStr + temp.substring(0,1).toUpperCase() + temp.substring(1,temp.length)+" "; 
 
    } 
 
return newStr; 
 
} 
 

 
alert(LetterCapitalize("hello i am rohit "));

+0

Проверьте свой код; он не работает (ошибка ссылки. Но тоже ошибка algo) –

+0

Обновлены некоторые незначительные ошибки, так как я не тестировал. Спасибо chumklu !! Это верно, посмотрите на скрипку. –

-1

Вы можете достичь этого, заменив функцию без расщепления.

function LetterCapitalize(str) { 
    return str.replace(/(^|)([a-z])/g, function(x,y,z) { 
    return y+z.toUpperCase() 
    } 
    ) 
} 
console.log(LetterCapitalize('foo bar buz')) 
0

Может быть, вы запутались возвращением в MAP функциональность:

function LetterCapitalize(str) { 
 
    var arr = str.split(" "), 
 
    newArr = arr.map(
 
    function(word) { 
 
     return word.substring(0,1).toUpperCase() + word.substring(1); 
 
    }); 
 
    return newArr.join(" "); 
 
} 
 

 
alert(LetterCapitalize("This is a test"))