Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.05.2014, 11:26
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Приведение первого символа к большому регистру
Здравствуйте, подскажите пожалуйста, почему в данном примере не получается привести к верхнему регистру например второй символ из строки или всю строку?

Почему приводит только первый символ к верхнему регистру, даже при отсутствии параметров .charAt() (вторая строка) ?

function ucFirst(firstLetter){
	var newStr = firstLetter.charAt(0).toUpperCase();
	for(var i=1; i<firstLetter.length; i++) {
		newStr += firstLetter.charAt(i);
	}
	return newStr;
}
Ответить с цитированием
  #2 (permalink)  
Старый 16.05.2014, 12:22
Профессор
Отправить личное сообщение для depp Посмотреть профиль Найти все сообщения от depp
 
Регистрация: 22.04.2014
Сообщений: 151

не проще ли так:
function ucFirst(firstLetter){
    return firstLetter.toUpperCase();
}

а в контексте данного примера в цикле for должно быть firstLetter.charAt(i).toUpperCase();
вместо firstLetter.charAt(i);
Ответить с цитированием
  #3 (permalink)  
Старый 16.05.2014, 12:25
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от Александр222 Посмотреть сообщение
Здравствуйте, подскажите пожалуйста, почему в данном примере не получается привести к верхнему регистру например второй символ из строки или всю строку?
Может потому что в приведенном примере это нигде не написано? Или оно методом телепатии должно догадаться какой символ и к какому регистру ему надо приводить?

Сообщение от Александр222 Посмотреть сообщение
Почему приводит только первый символ к верхнему регистру, даже при отсутствии параметров .charAt() (вторая строка) ?
А что оно должно делать при отсутствии параметров в charAt? Символ на какой позиции искать? Если надо изменить регистр всей строки то и пиши strVar.toUpperCase()
Ответить с цитированием
  #4 (permalink)  
Старый 16.05.2014, 15:25
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Так если всю строку
return firstLetter.toUpperCase();

а запись
firstLetter.charAt(i).toUpperCase();

приводит к подобному ответу
"qwertWERT"
то есть вся строка сама по себе возвращается + с верхним регистром без первого символа.
Ответить с цитированием
  #5 (permalink)  
Старый 16.05.2014, 15:29
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Цитата:
Может потому что в приведенном примере это нигде не написано? Или оно методом телепатии должно догадаться какой символ и к какому регистру ему надо приводить?
Указаны параметры в .charAt(0) (вторая строка) которые относятся к определенному по счету символу, который следует привести к верхнему регистру, НО если указать в этих параметрах 1 или 3, не срабатывает, приводит к верхнему регистру 1й символ.
Почему?
Ответить с цитированием
  #6 (permalink)  
Старый 16.05.2014, 16:14
Профессор
Отправить личное сообщение для depp Посмотреть профиль Найти все сообщения от depp
 
Регистрация: 22.04.2014
Сообщений: 151

function ucFirst(firstLetter,e){
    var newStr = '';
	for(var i=0; i<firstLetter.length; i++) {
		newStr += e==i ? firstLetter.charAt(i).toUpperCase() : firstLetter.charAt(i);
	}
	return newStr;
}
ucFirst('привет',1) // подразумевается вторая буква
Ответить с цитированием
  #7 (permalink)  
Старый 16.05.2014, 17:58
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Очень не эффективное решение в плане производительности. Есть тема делать нормально:
function rangeToUpperCase(string, from, to) {
  if (!to) to = from + 1;

  return string.slice(0, from) +
    string.slice(from, to).toUpperCase() +
    string.slice(to);
}

alert( rangeToUpperCase('test', 1) );
Ответить с цитированием
  #8 (permalink)  
Старый 17.05.2014, 18:41
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Цитата:
function ucFirst(firstLetter,e){
var newStr = '';
for(var i=0; i<firstLetter.length; i++) {
newStr += e==i ? firstLetter.charAt(i).toUpperCase() : firstLetter.charAt(i);
}
return newStr;
}
ucFirst('привет',1) // подразумевается вторая буква
Ясно, спасибо!

Цитата:
function rangeToUpperCase(string, from, to) {
if (!to) to = from + 1;

return string.slice(0, from) +
string.slice(from, to).toUpperCase() +
string.slice(to);
}
alert( rangeToUpperCase('test', 1) );
Со slice не сталкивался, не совсем ясно, дальше смотрю будет по учебнику.
Спасибо за ответ.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление первого и последнего символа строкb Vampir3 Общие вопросы Javascript 4 23.08.2012 12:57
Проверка ввода первого символа. lamer Общие вопросы Javascript 3 07.08.2012 15:57