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('просто рандомная фраза'));
  • Вопрос задан
  • 118 просмотров
Решения вопроса 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 или предыдущий символ пробел)

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

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

Похожие вопросы