Zheleznov
@Zheleznov

Объясните пожалуйста что происходит в той функции?

Добрый день

Есть код, который делает каждую первую букву в фразе с большой буквы

тут код

const word = (str) => {
  let result = '';
  for (let i = 0; i < length(str); i += 1) {
    console.log(str[i]); 
    
    const world = str[i] !== ' ' && (i === 0 || str[i - 1] === ' ');
    result += world ? toUpperCase(str[i]) : str[i];
    
  }

return result;
};

document.write(word('просто рандомная фраза'));



Всё работает отлично, но не понятно что происходит в этих строках:
const world = str[i] !== ' ' && (i === 0 || str[i - 1] === ' ');
result += world ? toUpperCase(str[i]) : str[i];


Объясните пожалуйста конкретнее, хочу понять...

P/s: Этот код взят из урока, и там он работает, а в песочнице нет, для песочницы, немного переписал, но понятнее не стало
const word = (str) => {
  let result = '';
  for (let i = 0; i < str.length; i += 1) {
    console.log(str[i]); 
    
    const current = str[i] !== ' ' && (i === 0 || str[i - 1] === ' ');
 
    result += current ? str[i].toUpperCase() : str[i];
    
  }

return result;
};

document.write(word('просто рандомная фраза'));
  • Вопрос задан
  • 109 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
// это условие, при котором букву надо делать большой
const world = str[i] !== ' ' && (i === 0 || str[i - 1] === ' ');

// здесь добавляется либо заглавная, либо просто-как-есть буква,
// в зависимости от условия выше
result += world ? toUpperCase(str[i]) : str[i];


Условие разбирается так:
текущая буква не пробел str[i] !== ' '
И это первая буква в строке i === 0 ИЛИ предыдущий символ пробел str[i - 1] === ' '

Плохо здесь то, что никак не обрабатываются не-первые буквы. Из строки "habraHabr" получится "HabraHabr", хотя правильнее, наверное, было бы "Habrahabr"
Ответ написан
mmmaaak
@mmmaaak
Переменная current хранит информацию о том, является ли текущий символ строки началом слова, а именно проверяется, что:

str[i] не пробел и (тут нам нужно посмотреть на предыдущий символ, если он пробел, а текущий не пробел, значит текущий символ является началом слова, но так как если это самый первый символ с индексом 0, проверяя предыдущий символ мы выйдем за границы "массива" аля строки, поэтому там стоит или индекс === 0 или предыдущий символ пробел)

Есть мнение, что такой код однобуквенные предлоги также озаглавит
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы