2016-09-24 5 views
1

Я пытаюсь изменить субиндекс строкового массива, но он не изменяет. Существует jsbin link.javascript изменить субиндекс строкового массива

function LetterCapitalize(str) { 
 
    var arr = str.split(" "); 
 

 
    var nstr = ""; 
 
    for (var i = 0; i < arr.length; i++) { 
 

 
    var ltr = arr[i][0]; 
 
    console.log('ltr: ' + ltr.toUpperCase()); 
 
    arr[i][0] = ltr.toUpperCase(); 
 
    nstr += arr[i] + " "; 
 
    } 
 
    str = nstr.trim(); 
 
    console.log("result: " + str); 
 
    return str; 
 
} 
 

 
LetterCapitalize("hello world");

+1

потому, что строки являются неизменными. –

ответ

2

Вы могли бы попробовать что-то вроде следующего:

function LetterCapitalize(str) { 
 
    var arr = str.split(" "); 
 

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

 
    str = nstr.trim();  
 

 
    console.log("result: " + str); 
 

 
    return str; 
 

 
} 
 

 
console.log(LetterCapitalize("hello world"));

линии, что делает различие заключается в следующем:

arr[i] = arr[i][0].toUpperCase() + arr[i].slice(1); 

Что мы здесь делаем, это заглавная буква первой строки строки в arr[i], а затем конкатенировать заглавную букву с остальными буквами.

+1

Вместо конкатенации в переменной nstr лучше использовать 'return arr.join ('');' – jcubic

2

Это потому, что (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#Character_access):

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

I.e. строки неизменяемы.

2

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

Нечто подобное.

var str = "hello world"; 
 

 
var newStr = str.replace(/\b(\w)/g, function(chr) { 
 
    return chr.toUpperCase() 
 
}) 
 

 
console.log(newStr)

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