Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.06.2017, 15:57
Интересующийся
Отправить личное сообщение для Alexsandr Посмотреть профиль Найти все сообщения от Alexsandr
 
Регистрация: 22.05.2017
Сообщений: 25

функция изменения первых букв слова на верхний регистр
const bigword = (str) => {
  let result = "";
  let b = 0;
   for (let i = 0; i < str.length; i++){

    if (str.charAt(i) === " " && str.charAt( b = i + 1 ) !== " " || i === 0 ) {
     result += str[i].toUpperCase();
    } else {
    result += str.charAt(i);
    }
  }
    return result;
}

проблема в том что условие
if (str.charAt(i) === " " && str.charAt( b = i + 1 ) !== " "
не работает, предполагалось что работать будет так если символ равен пустой строке и за ним идет символ не пустая строка то этот символ надо перевести в верхний регистр
Ответить с цитированием
  #2 (permalink)  
Старый 22.06.2017, 16:10
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

const bigword = str => str.replace(/(?:^|\s)[a-zа-яё]/gi, m => m.toUpperCase());
Ответить с цитированием
  #3 (permalink)  
Старый 22.06.2017, 16:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Alexsandr,
"use strict"
const bigword = (str) => {
  let result = "";
  let b = true;
   for (let i = 0; i < str.length; i++){
    result += b ? str[i].toUpperCase() : str.charAt(i);
    b = str.charAt(i) === " ";}
    return result;
}
alert(bigword(" привет тест"));
Ответить с цитированием
  #4 (permalink)  
Старый 22.06.2017, 16:33
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Кстати, если пишете на ES6, то можете спокойно использовать:

"use strict"
const bigword = (str) => {
  let result = "";
  let b = true;
   for (let i of str){
    result += b ? i.toUpperCase() : i;
    b = i === " ";}
    return result;
}

alert(bigword(" привет тест"));
Ответить с цитированием
  #5 (permalink)  
Старый 22.06.2017, 16:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Ruslan_xDD,
ок!
Ответить с цитированием
  #6 (permalink)  
Старый 22.06.2017, 17:17
Интересующийся
Отправить личное сообщение для Alexsandr Посмотреть профиль Найти все сообщения от Alexsandr
 
Регистрация: 22.05.2017
Сообщений: 25

я не понимаю что за значки ? в коде
я прохожу курс на hexlet там мы это не проходили
Задачу надо решить именно с помощью указанных в коде приемов
if (str.charAt(i) === " " && str.charAt( b = i + 1 ) !== " "

и почему не работает это условие?
Ответить с цитированием
  #7 (permalink)  
Старый 22.06.2017, 17:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от Alexsandr
почему не работает это условие?
потому что следующего элемента может не быть
Ответить с цитированием
  #8 (permalink)  
Старый 22.06.2017, 17:23
Интересующийся
Отправить личное сообщение для Alexsandr Посмотреть профиль Найти все сообщения от Alexsandr
 
Регистрация: 22.05.2017
Сообщений: 25

ввожу hellow world
выходит Hellow world
но ведь между ними есть пробел и следующий символ w
Ответить с цитированием
  #9 (permalink)  
Старый 22.06.2017, 17:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Alexsandr,
"use strict"
const bigword = (str) => {
  let result = "";
  for (let i = 0; i < str.length; i++){

    if ( i === 0 || str.charAt(i) !== " " && str.charAt( i - 1 ) === " "  ) {
     result += str[i].toUpperCase();
    } else {
    result += str.charAt(i);
    }
  }
    return result;
}

alert(bigword(" привет тест"));
Ответить с цитированием
  #10 (permalink)  
Старый 22.06.2017, 17:26
Интересующийся
Отправить личное сообщение для Alexsandr Посмотреть профиль Найти все сообщения от Alexsandr
 
Регистрация: 22.05.2017
Сообщений: 25

сделал ошибку
result += str[i].toUpperCase();
исправил
result += str[b].toUpperCase();
b это i +1 то есть следующий за пробелом символ
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция изменения DOM, нужно разобраться что и как fiw Общие вопросы Javascript 1 03.11.2011 08:43