Як назвати регістр речення в JavaScript

Пам'ятаєте, як у початковій школі ваші вчителі показували вам, як правильно писати роботу? Перше, з чого ви починаєте, це хороший заголовок, і кожен гарний заголовок правильно пишеться з великої літери.

Під час цього виклику сценаріїв алгоритмів ми дізнаємось, як назви регістру речення в JavaScript. Врешті-решт, ми будемо мати наш алгоритм, щоб взяти в реченні і велику літеру першої літери кожного слова, як якщо б це була назва статті.

Інструкції з алгоритму

Поверніть наданий рядок із першою літерою кожного слова з великої літери. Переконайтеся, що решта слів написана малими літерами. Для цілей цієї вправи ви також повинні писати великі букви сполучних слів, таких як «the» та «of».

Надані тестові кейси

  • titleCase("I'm a little tea pot")повинен повернути рядок.
  • titleCase("I'm a little tea pot")повинен повернутися I'm A Little Tea Pot.
  • titleCase("sHoRt AnD sToUt")повинен повернутися Short And Stout.
  • titleCase("HERE IS MY HANDLE HERE IS MY SPOUT")повинен повернутися Here Is My Handle Here Is My Spout.

Рішення No1: .map () та .slice ()

ПЕДАК

Розуміння проблеми : У нас є один вхід, рядок. Наш результат також є рядком. Зрештою, ми хочемо повернути вхідний рядок із першою літерою - і лише першою літерою - кожного слова з великої літери.

Приклади / тестові випадки : Наведені нами тестові кейси показують, що ми повинні мати великі літери лише на початку кожного слова. Решту нам слід писати малими літерами. Надані тестові приклади також показують, що нам не кидають жодних кривих куль у термінах дивних складних слів, розділених символами замість пробілів. Це хороша новина для нас!

Структура даних : нам доведеться перетворити наш вхідний рядок у масив, щоб маніпулювати кожним словом окремо.

Кілька приміток щодо методів, які ми будемо використовувати:

Поговоримо про .map():

.map() створює новий масив з результатами виклику функції для кожного елемента масиву.

Іншими словами, .map()дозволяє нам маніпулювати кожним елементом масиву за допомогою функції, а потім повертати новий масив із результатами нашої маніпуляції. Функція може орієнтуватися як на currentValue, так і на індекс цього currentValue, приблизно так:

array.map((currentValue, Index) => { // manipulate the currentValue in some way})

Ми не завжди повинні використовувати Індекс. Однак бувають випадки, коли нам потрібно націлити елементи масиву за їх індексом, тому це зручно мати на увазі.

Тепер давайте розглянемо приклад .map()дії. У нас є масив, заповнений числами, і ми хочемо помножити кожне число на 2.

let arrayOfNumbers = [3, 6, 10, 42, 98]arrayOfNumbers.map(number => number * 2)// returns [6, 12, 20, 84, 196]

Тепер давайте дослідимо .slice():

.slice()витягує розділ рядка і повертає його як новий рядок. Якщо ви зателефонуєте .slice()рядку, не передавши йому жодної додаткової інформації, він поверне весь рядок.

"Bastian".slice()// returns "Bastian"

Ми маємо можливість передавати .slice()beginIndex та endIndex, наприклад

.slice(beginIndex, endIndex)

Це вказує, з .slice()чого почати нарізання, а де закінчити нарізку. Майте на увазі, що рядки мають нульовий індекс! Отже, якщо ми хотіли повернутися з 2-проіндексованого листа "Бастіан" до, але не включаючи 5-проіндексованого листа "Бастіана", ми могли б зробити це:

"Bastian".slice(2, 5)// returns "sti"

З огляду на це, ми можемо відрубати початок слів і повернути решту, передавши лише beginIndex, приблизно так:

"Bastian".slice(3)// returns "tian"

Алгоритм :

  1. Перетворіть усі літери strна малі літери.
  2. Розділіть нижній регістр strна масив, при цьому кожне слово буде окремим елементом масиву.
  3. Пропишіть першу літеру кожного елемента масиву.
  4. Об’єднайте кожен елемент масиву в один рядок, розділяючи кожне слово пробілом.
  5. Повернути рядок із заголовком.

Код : Дивіться нижче!

Я створив багато непотрібних локальних змінних у наведеному вище коді, щоб показати вплив кожного методу на вхід. Нижче я видалив локальні змінні, об’єднав усі методи разом і видалив коментарі.

Рішення No2: регулярне вираження

Увага! Regex - не найкраще рішення для початківців. Регулярні вирази самі по собі важкі, і їх складність є загальною проблемою для багатьох досвідчених розробників. Але привіт, я пишу це, і я люблю кидати виклик собі, щоб далі розуміти регулярні вирази, коли тільки можу. Цей виклик сценаріїв алгоритмів насправді добре піддається регулярному виразу, тому давайте подивимось на нього і подивимось, чи зможемо ми вдосконалити наше розуміння регулярного виразу!

ПЕДАК

Розуміння проблеми : У нас є один вхід, рядок. Наш результат також є рядком. Зрештою, ми хочемо повернути вхідний рядок із першою літерою - і лише першою літерою - кожного слова з великої літери.

Приклади / тестові випадки : Наведені нами тестові кейси показують, що ми повинні мати великі літери лише на початку кожного слова. Решту нам слід писати малими літерами. Надані тестові приклади також показують, що нам не кидають жодних кривих куль у термінах дивних складних слів, розділених символами замість пробілів. Це хороша новина для нас!

Структура даних : Ми не будемо перетворювати наш рядок у масив під час використання регулярних виразів. JavaScript має чудовий метод, .replace()який дозволяє нам націлити майже все, що нам потрібно, у рядок і замінити його чимось іншим. Ми використовуємо регулярні вирази для націлювання на те, що ми хочемо замінити.

У регулярних виразах використовується так багато символів, що я не можу сподіватися надати тут широкий огляд. Однак я можу вказати вам цю шпаргалку, яку я використовую, коли мені доводиться використовувати регулярний вираз.

Що я можу зробити, це сказати вам, що регулярний вираз із .replace()JavaScript відповідає базовій схемі. .replace()приймає два аргументи: шаблон (зазвичай регулярний вираз) і заміну (може бути рядком або функцією).

string.replace(regex, function)

У нашому рішенні ми замінимо букву на початку кожного слова. Як ми можемо змусити регулярні вирази робити це за нас? Ми просимо .replace()відповідати будь-якому символу після пробілу або першому символу цілого рядка (оскільки саме перше слово рядка не має пробілів перед собою).

Давайте розберемо частину регулярного виразу нашого рішення. Для цього давайте розглянемо перший аргумент .replace()функції. Це код регулярного виразу, який визначає, якому шаблону ми хочемо відповідати та замінювати.

// full solution:
function titleCase(str)  return str.toLowerCase().replace(/(^

Нарешті ми хочемо знайти всі символи, що не є пробілами, що представлено \S.

Потім ми хочемо вказати, що ми хочемо збігати ці непробільні символи на початку рядка ^або |після будь-якого пробілу \s.

Ми додаємо глобальний модифікатор gдля пошуку та заміни всіх таких шаблонів у всьому рядку.

Алгоритм :

  1. Перетворіть усі літери strна малі літери.
  2. Замініть першу літеру кожного слова у рядку на велику літеру.
  3. Повернути рядок із заголовком.

Код : Дивіться нижче!

Якщо у вас є інші рішення та / або пропозиції, будь ласка, поділіться з ними у коментарях!

Ця стаття є частиною серії сценаріїв алгоритму freeCodeCamp.

Ця стаття посилається на сценарії базового алгоритму freeCodeCamp: Заголовок - вирок

Ви можете стежити за мною на Medium, LinkedIn та GitHub!