Kaip pavadinti didžiosiomis raidėmis sakinį „JavaScript“

Pamenate klasėje, kai mokytojai parodė, kaip tinkamai parašyti referatą? Pirmas dalykas, nuo kurio pradedate, yra geras pavadinimas, o kiekvienas geras vardas yra tinkamai rašomas didžiosiomis raidėmis.

Per šį algoritmo scenarijaus iššūkį sužinosime, kaip sakinį pavadinti „JavaScript“. Galų gale mes turėsime, kad mūsų algoritmas paimtų sakinį ir rašytų kiekvieno žodžio pirmąją raidę taip, tarsi tai būtų straipsnio pavadinimas.

Algoritmo instrukcijos

Grąžinkite pateiktą eilutę su kiekvieno žodžio pirmąja raide didžiosiomis raidėmis. Įsitikinkite, kad likęs žodis yra mažosiomis raidėmis. Norėdami atlikti šį pratimą, taip pat turėtumėte rašyti didžiąsias jungiamuosius žodžius, tokius kaip „the“ ir „of“.

Pateikti bandymų atvejai

  • titleCase("I'm a little tea pot")turėtų grąžinti eilutę.
  • titleCase("I'm a little tea pot")turėtų grįžti I'm A Little Tea Pot.
  • titleCase("sHoRt AnD sToUt")turėtų grįžti Short And Stout.
  • titleCase("HERE IS MY HANDLE HERE IS MY SPOUT")turėtų grįžti Here Is My Handle Here Is My Spout.

1 sprendimas: .map () ir .slice ()

PEDAC

Problemos supratimas : turime vieną įvestį, eilutę. Mūsų produkcija taip pat yra eilutė. Galų gale norime grąžinti įvesties eilutę su pirmąja raide ir tik pirmąja kiekvieno žodžio raide.

Pavyzdžiai / bandymo atvejai : pateikti bandymo atvejai rodo, kad didžiosiomis raidėmis turėtume rašyti tik kiekvieno žodžio pradžioje. Likusią dalį turime rašyti mažosiomis raidėmis. Pateikti bandymo atvejai taip pat rodo, kad mums nėra išmesti jokie kreivės kamuoliai keistais sudėtiniais žodžiais, atskirtais simboliais, o ne tarpais. Tai gera žinia mums!

Duomenų struktūra : norėdami manipuliuoti kiekvienu žodžiu atskirai, turėsime transformuoti įvesties eilutę į masyvą.

Pora pastabų apie metodus, kuriuos naudosime:

Pakalbėkime apie .map():

.map() sukuria naują masyvą su funkcijos iškvietimo rezultatais kiekviename masyvo elemente.

Kitaip tariant, .map()leidžia mums manipuliuoti kiekvienu masyvo elementu su funkcija, tada grąžinti naują masyvą su mūsų manipuliavimo rezultatais. Funkcija gali nukreipti tiek į dabartinę vertę, tiek į tos dabartinės vertės indeksą, pavyzdžiui:

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

Ne visada turime naudoti „Index“. Tačiau bus atvejų, kai masyvo elementus turėsime taikyti pagal jų indeksą, todėl patartina tai nepamiršti.

Dabar pažiūrėkime, .map()kaip veikia. Mes turime skaičių masyvą ir norime kiekvieną skaičių padauginti iš 2.

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

Dabar ištirkime .slice():

.slice()ištraukia eilutės sekciją ir grąžina ją kaip naują eilutę. Jei .slice()iškviesite eilutę neperdavę jai jokios papildomos informacijos, ji grąžins visą eilutę.

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

Mes turime galimybę perduoti .slice()beginIndex ir endIndex, panašiai kaip

.slice(beginIndex, endIndex)

Tai nurodo .slice(), nuo ko pradėti pjaustymą ir kur baigti pjaustymą. Atminkite, kad eilučių indeksas yra nulinis! Taigi, jei norėtume grįžti iš 2 indeksuotų „Bastian“ laiškų, bet neįtraukę 5 indeksuotų „Bastian“ raidžių, galėtume tai padaryti:

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

Atsižvelgdami į tai, galime nukirpti žodžių pradžią ir grąžinti likusius žodžius, įvesdami tik pradžios indeksą:

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

Algoritmas :

  1. Visas raides paverskite strmažosiomis raidėmis.
  2. Padalinkite mažąsias raides strį masyvą, kiekvienas žodis yra atskiras masyvo elementas.
  3. Pirmoji kiekvieno masyvo elemento raidė rašoma didžiosiomis raidėmis.
  4. Sujunkite kiekvieną masyvo elementą į vieną eilutę, atskirdami kiekvieną žodį tarpu.
  5. Grąžinkite pavadinimo eilutę.

Kodas : Žiūrėkite žemiau!

Pirmiau pateiktame kode sukūriau daug nereikalingų vietinių kintamųjų, kad galėčiau parodyti kiekvieno metodo poveikį įėjimui. Žemiau pašalinau vietinius kintamuosius, sujungiau visus metodus ir pašalinau komentarus.

2 sprendimas: regex

Įspėjimas! „Regex“ nėra geriausias sprendimas pradedantiesiems. Reguliarūs posakiai savaime yra sunkūs, o jų sudėtingumas yra įprastas dalykas daugeliui patyrusių kūrėjų. Bet ei, aš rašydamas tai jaučiuosi drąsus ir mėgstu mesti sau iššūkį, kad galėčiau geriau suprasti regexą, kai tik galiu. Šis algoritmo scenarijaus iššūkis iš tikrųjų tinka regexui, todėl pažvelkime į jį ir pažiūrėkime, ar galime geriau suprasti regex!

PEDAC

Problemos supratimas : turime vieną įvestį, eilutę. Mūsų produkcija taip pat yra eilutė. Galų gale norime grąžinti įvesties eilutę su pirmąja raide ir tik pirmąja kiekvieno žodžio raide.

Pavyzdžiai / bandymo atvejai : pateikti bandymo atvejai rodo, kad didžiosiomis raidėmis turėtume rašyti tik kiekvieno žodžio pradžioje. Likusią dalį turime rašyti mažosiomis raidėmis. Pateikti bandymo atvejai taip pat rodo, kad mums nėra išmesti jokie kreivės kamuoliai keistais sudėtiniais žodžiais, atskirtais simboliais, o ne tarpais. Tai gera žinia mums!

Duomenų struktūra : Naudodami įprastas išraiškas, savo eilutės nepakeisime į masyvą. „JavaScript“ turi puikų metodą .replace(), leidžiantį nukreipti beveik viską, ko norime į eilutę, ir pakeisti ją kažkuo kitu. Mes naudojame įprastus posakius, kad nukreiptume į tai, ką norime pakeisti.

Reguliariuose posakiuose naudojama tiek daug simbolių, kad negaliu tikėtis čia pateikti jų plačios apžvalgos. Vis dėlto galiu atkreipti jūsų dėmesį į šį cheatsheet, kurį naudoju visada, kai man tenka naudoti regex.

Ką galiu padaryti, tai pasakyti, kad .replace()„JavaScript“ regex naudojimas atitinka pagrindinį modelį. .replace()turi du argumentus: šabloną (paprastai reguliarią išraišką) ir pakaitalą (gali būti eilutė ar funkcija).

string.replace(regex, function)

Savo sprendime raidę pakeisime kiekvieno žodžio pradžioje. Kaip gauti regex padaryti tai už mus? Mes sakome, .replace()kad atitiktų bet kurį simbolį, einantį tarpą arba atitinkantį pirmąjį visos eilutės simbolį (nes pačiame pirmame eilutės žodyje prieš jį nėra tarpo).

Išskaidykime savo sprendimo regex dalį. Norėdami tai padaryti, pažvelkime į pirmąjį .replace()funkcijos argumentą . Tai regex kodas, kuris nustato, kokį modelį norime suderinti ir pakeisti.

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

Galų gale norime rasti visus simbolius, kurie nėra tarpai, o tai reiškia \S.

Tada norime patikslinti, kad norime sutapti tuos ne tarpų simbolius eilutės pradžioje ^arba |po bet kurio tarpo \s.

Pridedame visuotinį modifikatorių, gkad galėtume ieškoti ir pakeisti visus tokius modelius visoje eilutėje.

Algoritmas :

  1. Visas raides paverskite strmažosiomis raidėmis.
  2. Kiekvieno eilutės žodžio pirmąją raidę pakeiskite didžiosiomis raidėmis.
  3. Grąžinkite pavadinimo eilutę.

Kodas : Žiūrėkite žemiau!

Jei turite kitų sprendimų ir (arba) pasiūlymų, prašome pasidalinti komentarais!

Šis straipsnis yra „freeCodeCamp“ algoritmų scenarijų serijos dalis.

Šiame straipsnyje pateikiama nuoroda į „FreeCodeCamp“ pagrindinio algoritmo scenarijų kūrimą: antraštės atvejis sakinys

Galite sekti mane „Medium“, „LinkedIn“ ir „GitHub“!