Вход

Просмотр полной версии : функция изменения первых букв слова на верхний регистр


Alexsandr
22.06.2017, 15:57
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 ) !== " " не работает, предполагалось что работать будет так если символ равен пустой строке и за ним идет символ не пустая строка то этот символ надо перевести в верхний регистр

ruslan_mart
22.06.2017, 16:10
const bigword = str => str.replace(/(?:^|\s)[a-zа-яё]/gi, m => m.toUpperCase());

рони
22.06.2017, 16:16
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(" привет тест"));

ruslan_mart
22.06.2017, 16:33
Кстати, если пишете на 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(" привет тест"));

рони
22.06.2017, 16:39
Ruslan_xDD,
ок!:)

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

рони
22.06.2017, 17:19
почему не работает это условие?
потому что следующего элемента может не быть

Alexsandr
22.06.2017, 17:23
ввожу hellow world
выходит Hellow world
но ведь между ними есть пробел и следующий символ w

рони
22.06.2017, 17:24
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(" привет тест"));

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

Alexsandr
22.06.2017, 17:27
теперь выходит "Hello,Wworld!"

рони
22.06.2017, 17:32
Alexsandr,
чем пост №9 не устраивает?

laimas
22.06.2017, 17:48
Alexsandr,
шаблоном рег. выражения взять по границе слова.

Alexsandr
23.06.2017, 07:24
Все нормально устраивает, я решил задачу, посмотрел решение учителя и
export default (str) => {
let result = '';
for (let i = 0; i < length(str); i += 1) {
const shouldBeBig = str[i] !== ' ' && (i === 0 || str[i - 1] === ' ');/*создает константу которая что? Равняется символу который равен нулю или перед ним пробел? То есть при каждой итерации это константа проводит отбор?*/
result += shouldBeBig ?/* что за знак '?' первые вижу*/ toUpperCase(str[i]) : str[i];/* тоже непонятно что это ":"*/
}

return result;
};

рони
23.06.2017, 14:06
что за знак '?'
оператор-вопросительный-знак (https://learn.javascript.ru/ifelse#оператор-вопросительный-знак)

laimas
23.06.2017, 14:48
оператор-вопросительный-знак
Название в учебнике конечно веселое. :) Везде это называется условным (тернарным) оператором.