Како насловити велика и мала слова реченице у ЈаваСцрипт-у

Сјећате се када су вам у основној школи учитељи показали како правилно писати рад? Прво са чим започнете је добар наслов, а сваки добар наслов правилно је написан великим почетним словом.

Током овог изазова скриптирања алгоритма, научићемо како насловити велика и мала слова реченице у ЈаваСцрипт-у. На крају, алгоритам ће узети реченицу и написати велико слово сваке речи као да је наслов рада.

Упутства за алгоритам

Вратите пружени низ са првим словом сваке речи великим словом. Уверите се да је остатак речи написан малим словима. У сврху ове вежбе, такође треба писати великим словима повезујуће речи попут „тхе“ и „оф“.

Обезбеђени тест случајеви

  • 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.

Решење # 1: .мап () и .слице ()

ПЕДАЦ

Разумевање проблема : Имамо један улаз, низ. Наш излаз је такође низ. На крају, желимо да вратимо улазни низ са првим словом - и само првим словом - сваке речи написане великим словом.

Примери / случајеви тестирања : Наши понуђени примери показују да бисмо требали имати велика слова само на почетку сваке речи. Остало морамо да умањимо. Дати тест примери такође показују да нам се не бацају никакве криве лопте у смислу чудних сложених речи одвојених симболима уместо размака. То су добре вести за нас!

Структура података : Морамо да трансформишемо наш улазни низ у низ како бисмо манипулисали сваком речју засебно.

Неколико напомена о методама које ћемо користити:

Хајде да разговарамо о .map():

.map() креира нови низ са резултатима позивања функције на сваком елементу низа.

Другим речима, .map()омогућава нам да сваки елемент у низу манипулишемо функцијом, а затим вратимо нови низ са резултатима наше манипулације. Функција може циљати и цуррентВалуе и индекс те цуррентВалуе, на следећи начин:

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()бегинИндек и ендИндек, слично томе

.slice(beginIndex, endIndex)

Ово говори .slice()где треба започети резање, а где завршити резање. Имајте на уму да су жице индексиране нулом! Дакле, ако смо желели да се вратимо са 2-индексираног писма „Бастиана“, али не укључујући и 5-индексирано писмо „Бастиана“, могли бисмо ово:

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

Имајући то на уму, можемо одсећи почетак речи и вратити остале додавањем само почетног индекса, на следећи начин:

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

Алгоритам :

  1. Претворите сва слова у strмала слова.
  2. Поделите мала слова strу низ, при чему је свака реч засебан елемент у низу.
  3. Велико слово сваког елемента у низу написати великим словом.
  4. Спојите сваки елемент низа у један низ раздвајајући сваку реч размаком.
  5. Врати низ у наслову.

Шифра : Погледајте доле!

Направио сам пуно непотребних локалних променљивих у горњем коду како бих показао ефекат сваке методе на улаз. Испод сам уклонио локалне променљиве, повезао све методе и уклонио коментаре.

Решење # 2: регуларни израз

Упозорење! Регек није најбоље решење за почетнике. Регуларни изрази су сами по себи тешки, а њихова сложеност уобичајена је замисао многих искусних програмера. Али хеј, осећам се авантуристички док пишем ово и волим да изазивам себе да даље разумем регуларни израз кад год могу. Овај изазов скриптирања алгоритма заправо се добро подудара са регуларним изразом, па ћемо га погледати и видети можемо ли даље разумевати регуларни израз!

ПЕДАЦ

Разумевање проблема : Имамо један улаз, низ. Наш излаз је такође низ. На крају, желимо да вратимо улазни низ са првим словом - и само првим словом - сваке речи написане великим словом.

Примери / случајеви тестирања : Наши понуђени примери показују да бисмо требали имати велика слова само на почетку сваке речи. Остало морамо да умањимо. Дати тест примери такође показују да нам се не бацају никакве криве лопте у смислу чудних сложених речи одвојених симболима уместо размака. То су добре вести за нас!

Структура података : Нећемо трансформисати свој низ у низ док користимо регуларне изразе. ЈаваСцрипт има изврсну методу .replace()која нам омогућава да циљамо готово све што желимо у низу и заменимо их нечим другим. Регуларне изразе користимо за циљање онога што желимо да заменимо.

У регуларним изразима се користи толико симбола да се не могу надати да ћу овде дати њихов широк преглед. Ипак, могу да вас усмерим на овај цхеатсхеет, који користим кад год морам да употријебим регуларни израз.

Оно што могу да урадим је да вам кажем да регуларни израз са .replace()у ЈаваСцрипт-у следи основни образац. .replace()узима два аргумента: образац (обично регуларни израз) и замену (може бити низ или функција).

string.replace(regex, function)

У нашем решењу заменићемо слово на почетку сваке речи. Како да добијемо да регуларни израз то уради за нас? Кажемо да .replace()се подудара са било којим знаком који следи размак или подударањем првог знака целог низа (јер прва реч низа нема размак испред себе).

Раздвојимо регуларни део нашег решења. Да бисмо то урадили, погледајмо први аргумент .replace()функције. Ово је регуларни код који одређује којем обрасцу желимо да се прилагодимо и заменимо.

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

На крају желимо да пронађемо све знакове који нису размаци, што представља \S.

Затим желимо да одредимо да желимо да подударамо оне не-размаке на почетку низа ^или |након било ког размака \s.

Додајемо глобални модификатор gза тражење и замену свих таквих образаца у целом низу.

Алгоритам :

  1. Претворите сва слова у strмала слова.
  2. Замените прво слово сваке речи у низу великим словом.
  3. Врати низ у наслову.

Шифра : Погледајте доле!

Ако имате друга решења и / или сугестије, молимо вас поделите их у коментарима!

Овај чланак је део серије скриптирање алгоритма фрееЦодеЦамп.

Овај чланак упућује на скрипте за основни алгоритам ФрееЦодеЦамп: Наслов је реченица

Можете ме пратити на Медиум, ЛинкедИн и ГитХуб!