2015-10-15 3 views
4

Я пытаюсь загладить первую букву в каждом слове в строке. Мой код выглядит следующим образом:Строка [0] .toUpperCase() не возвращает ожидаемые результаты?

function LetterCapitalize(str) 
{ 
    var words=str.split(" "); 
    var newArray=[]; 
    for(i=0; i<words.length; i++) 
    { 
     var aWord=words[i]; 
     //this line below doesn't work...don't know why! 
     aWord[0]=aWord[0].toUpperCase(); 
     newArray.push(aWord); 
    }; 
    newArray.join(" "); 
    return newArray; 
}; 

Так что вопрос я вижу в том, что, когда я пытаюсь присвоить aWord [0] его заглавное значение, назначение не происходит? Как изменить это, чтобы произошло назначение?

PS. Я знаю, что существует метод регулярных выражений, который может сделать это одним махом, но я просто подобрал javascript несколько дней назад и еще не получил этого еще! как таковые, любые советы, которые не связаны с регулярным выражением высоко оценили

+3

Вам разрешено читать символ, а не мутировать его. – zerkms

+3

Я собирался ответить на это, но уже есть много хороших ответов. Еще одно замечание: вы, вероятно, захотите «вернуть newArray.join (« »);', прямо сейчас вы возвращаете сам массив, а не строку. – EelkeSpaak

+0

@EelkeSpaak спасибо за головы! – YOO629

ответ

10

Строки неизменны, так что это не будет делать ничего:

aWord[0]=aWord[0].toUpperCase(); 

Вместо вас должны создать новый строку:

aWord = aWord.substring(0, 1).toUpperCase() + aWord.substring(1); 
// or: 
aWord = aWord.charAt(0).toUpperCase() + aWord.substring(1); 
// or on *most* engines (all modern ones): 
aWord = aWord[0].toUpperCase() + aWord.substring(1); 
2

aWord[0] это символ, и вы не можете присвоить символ нового символа, как 'a' = 'b'

использовать переменную

for(i=0; i<words.length; i++) 
{ 
    var aWord=words[i]; 
    //this line below doesn't work...don't know why! 
    var newChar =aWord[0].toUpperCase(); 
    newArray.push(newChar); 
}; 
+0

* "' aWord [0] 'is char * * Нет, это строка, JavaScript не имеет« символов », просто строки с одним символом в них. Кроме того, ваше обновление только помещает в массив односимвольную строку, в то время как я уверен, что они хотели * rest * этого слова. –

+0

Вы правы, я не имел в виду в буквальном смысле это как символ – Catalin

1

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

function capsFirstLetter(str){ 
return str.substr(0,1).toUpperCase()+str.substr(1); 

} 
capsFirstLetter("hello") // Hello 

или вы можете добавить метод в классе струнных и использовании он для всех экземпляров строки

String.prototype.capsFirstLetter = function(){ 
     return this.substr(0,1).toUpperCase() + this.substr(1); 
    } 
"hello".capsFirstLetter() // "Hello" 
Смежные вопросы