2014-09-19 9 views
-1

Я изучаю JavaScript, и я разочарован тем, что приведенный ниже код не работает. Он по-прежнему является строчным «i». Я пытался загладить каждую букву в строке (отсюда цикл for), но я хотел остановиться и решить, что происходит не так.Как вы используете первую букву в строке?

str = 'i ran there'; 

for(var i = 0; i<str.length; i++){ 
    if(i===0){ 
    str[i] = str[i].charAt(0).toUpperCase(); 
    } 
} 


console.log(str); 

Кому это может быть интересно,

+0

http://stackoverflow.com/questions/2332811/capitalize-words-in-string – lastr2d2

+0

Строк неизменны в JavaScript. –

+0

@ RaymondChen, как уверенность BOD? :) –

ответ

0

Вы должны создать новую строку, потому что струны в JavaScript неизменны:

Сначала получить каждое слово, отделенные:

var arrayOfstrings = s.split(" "); 

После этого вы можете обработать каждую строку как есть собственное слово

Fancy путь:

var capFirstLetter = arrayOfStrings[index].replace(/^./, function (match) { 
    return match.toUpperCase(); 
}); 

Это всего лишь regex. /^./ означает первый символ в строке. А остальное самоочевидно.

Или так:

var s = arrayOfStrings[index]; 
var s2 = s[0].toUpperCase()+ s.substr(0,1); 

Или даже это действительно хромает способ

var s = arrayOfStrings[index]; 
var newS = ""; 
for(var i = 0; i < s.length; i++){ 
    if(i == 0) newS+= s[0].toUpperCase(); 
    else newS+= s[i]; 
} 

Конечно, все это может быть сделано в forloop увенчать их все и положить обратно вместе:

var s = "hello woorld hello world"; 
var arrayOfStrings = s.split(" "); 
for(var i = 0; i < arrayOfStrings.length; i++){ 
    arrayOfStrings[i]= arrayOfStrings[i].replace(/^./, function(match) {return match.toUpperCase();}); 
    } 
var s2 = arrayOfStrings.join(" "); 
+0

@RobG Хорошо, исправлено – Jay

0

Если я понимаю ваш вопрос, вы можете сделать это с чем-то вроде:

var str = 'i ran there'; 
 
var arr = str.split(" "); 
 
var div = document.getElementById("out"); 
 
for(var i = 0; i < arr.length; i++){ 
 
    // The First letter 
 
    // arr[i] = arr[i].substring(0,1).toUpperCase() + arr[i].substring(1); 
 
    // Every letter 
 
    arr[i] = arr[i].toUpperCase(); 
 
    div.innerHTML += arr[i] + "<br />"; 
 
}
<div id="out"></div>

Что касается того, что происходит в вашем коде, вы не можете изменить массив подпирают строки (предполагая, что это массив), как это.

+0

- это интерактивный фрагмент кода, добавленный в Stack Overflow в последнее время? – Wold

+0

yep, его новая игрушка :) –

+0

@Wold [Да] (http://blog.stackoverflow.com/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/?cb=1). –

0

Что-то не так, вот строки в javascript неизменяемы.

Вы не можете изменить их. Вы можете создать новую строку с изменением.

0

Вы запрашиваете индекс i строки String. Поскольку str является строкой, вы не можете использовать значения индекса для захвата определенных символов в строке - попробуйте console.log(str[0]) - он вернется не определен.

Чтобы выполнить то, что вы пытаетесь сделать, вам нужно просто добавить новую строку после заглавной буквы каждой буквы. Пример

str = 'i ran there'; 
capStr = '' 

for(var i = 0; i < str.length; i++){ 
    if(i === 0) capStr += str.charAt(i).toUpperCase(); 
    else capStr += str.charAt(i); 
} 

console.log(capStr); 
+0

Это в основном правильный ответ/то, что я ищу. Однако, если вы добавите оператор if/else в цикл for (до строки capStr), чтобы проверить, является ли (i === 0) именно то, что я ищу. Благодаря!! –

Смежные вопросы