Kuinka nimetä kirjainkoko lause lauseella JavaScript

Muistatko lukiossa, kun opettajat osoittivat sinulle, kuinka kirjoitat paperin oikein? Ensimmäinen asia, josta aloitat, on hyvä otsikko, ja jokainen hyvä otsikko on kirjoitettu oikein.

Tämän algoritmien komentosarjahaasteen aikana opimme, miten lause voidaan nimetä JavaScriptin avulla. Viime kädessä aiotaan, että algoritmimme ottaa lauseen ja isot kirjaimet jokaisen sanan ensimmäisestä kirjaimesta ikään kuin se olisi paperin otsikko.

Algoritmin ohjeet

Palauta annettu merkkijono jokaisen sanan alkukirjaimella. Varmista, että loppusana on pienillä kirjaimilla. Tätä harjoitusta varten sinun tulee myös kirjoittaa isot yhdyssanat, kuten "ja".

Toimitetut testitapaukset

  • titleCase("I'm a little tea pot")pitäisi palauttaa merkkijono.
  • titleCase("I'm a little tea pot")pitäisi palata I'm A Little Tea Pot.
  • titleCase("sHoRt AnD sToUt")pitäisi palata Short And Stout.
  • titleCase("HERE IS MY HANDLE HERE IS MY SPOUT")pitäisi palata Here Is My Handle Here Is My Spout.

Ratkaisu # 1: .map () ja .slice ()

PEDAC

Ongelman ymmärtäminen : Meillä on yksi tulo, merkkijono. Tuotoksemme on myös merkkijono. Viime kädessä haluamme palauttaa syötemerkkijonon jokaisen isolla kirjaimella - ja vain ensimmäisen kirjaimen.

Esimerkit / testitapaukset : Annetut testitapauksemme osoittavat, että isojen kirjainten pitäisi olla vain kunkin sanan alussa. Meidän on pientä kirjainta loput. Toimitetut testitapaukset osoittavat myös, että meille ei heitetä mitään käyräpalloja outojen yhdistettyjen sanojen suhteen, jotka on erotettu symboleilla välilyönnin sijaan. Se on hyvä uutinen meille!

Tietorakenne : Meidän on muutettava syöttömerkkijonomme taulukoksi, jotta voimme käsitellä kutakin sanaa erikseen.

Pari huomautusta käytetyistä menetelmistä:

Puhutaan .map():

.map() luo uuden taulukon, jossa tulokset kutsutaan funktio jokaiselle matriisin elementille.

Toisin sanoen .map()antaa meille mahdollisuuden manipuloida kutakin matriisin elementtiä toiminnolla ja palauttaa sitten uuden matriisin manipulointimme tuloksilla. Funktio voi kohdistaa sekä currentValue että sen currentValue indeksin, kuten:

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

Meidän ei tarvitse aina käyttää hakemistoa. On kuitenkin aikoja, jolloin meidän on kohdennettava matriisin elementit niiden indeksin mukaan, joten se on kätevä pitää mielessä.

Katsotaan nyt esimerkki .map()toiminnasta. Meillä on joukko numeroita ja haluamme kertoa jokaisen luvun kahdella.

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

Nyt tutkitaan .slice():

.slice()purkaa merkkijonon osan ja palauttaa sen uutena merkkijonona. Jos soitat .slice()merkkijonoon välittämättä sille mitään lisätietoja, se palauttaa koko merkkijonon.

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

Meillä on mahdollisuus välittää .slice()beginIndex ja endIndex, kuten niin

.slice(beginIndex, endIndex)

Tämä kertoo, .slice()mistä viipalointi aloitetaan ja missä viipalointi lopetetaan. Muista, että merkkijonot indeksoidaan nollaan! Joten jos haluaisimme palata Bastianin 2-indeksoidusta kirjaimesta siihen asti , että emme sisältäisi 5-indeksoitua Bastian-kirjainta, voisimme tehdä tämän:

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

Tässä mielessä voimme pilkkoa sanojen alun ja palauttaa loput sanoista kirjoittamalla vain beginIndexin, kuten:

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

Algoritmi :

  1. Käännä kaikki kirjaimet strpieniksi kirjaimiksi.
  2. Jaa pienet kirjaimet strtaulukoksi, jolloin kukin sana on erillinen elementti taulukossa.
  3. Isot kirjaimet taulukon kunkin elementin ensimmäisestä kirjaimesta.
  4. Yhdistä taulukon kukin osa yhdeksi merkkijonoksi erottamalla kukin sana välilyönnillä.
  5. Palauta otsikkomerkkijono.

Koodi : Katso alla!

Luin yllä olevaan koodiin paljon tarpeettomia paikallisia muuttujia osoittamaan kunkin menetelmän vaikutuksen tuloon. Alla olen poistanut paikalliset muuttujat, ketjutellut kaikki menetelmät yhteen ja poistanut kommentit.

Ratkaisu # 2: regex

Varoitus! Regex ei ole paras ratkaisu aloittelijoille. Säännölliset lausekkeet ovat itsessään vaikeita, ja niiden monimutkaisuus on yhteinen otte monille kokeneille kehittäjille. Mutta hei, tunnen itseni seikkailunhaluiseksi kirjoittaessani tätä, ja rakastan haastaa itseni ymmärtämään paremmin regexiä aina kun pystyn. Tämä algoritmien komentosarjahaaste soveltuu itse asiassa hyvin regexiin, joten katsotaanpa sitä ja katsotaan, voimmeko ymmärtää regexiä paremmin!

PEDAC

Ongelman ymmärtäminen : Meillä on yksi tulo, merkkijono. Tuotoksemme on myös merkkijono. Viime kädessä haluamme palauttaa syötemerkkijonon jokaisen isolla kirjaimella - ja vain ensimmäisen kirjaimen.

Esimerkit / testitapaukset : Annetut testitapauksemme osoittavat, että isojen kirjainten pitäisi olla vain kunkin sanan alussa. Meidän on pientä kirjainta loput. Toimitetut testitapaukset osoittavat myös, että meille ei heitetä mitään käyräpalloja outojen yhdistettyjen sanojen suhteen, jotka on erotettu symboleilla välilyönnin sijaan. Se on hyvä uutinen meille!

Tietorakenne : Emme muunna merkkijonoa taulukoksi käytettäessä säännöllisiä lausekkeita. JavaScriptillä on hieno menetelmä, .replace()jonka avulla voimme kohdistaa melkein kaiken mitä haluamme merkkijonoon ja korvata sen jollakin muulla. Käytämme säännöllisiä lausekkeita kohdistaaksemme, mitä haluamme korvata.

Säännöllisissä lausekkeissa on niin paljon symboleja, että en voi toivoa voivani antaa niistä kattavaa yleiskatsausta täällä. Voin kuitenkin osoittaa sinut kohti tätä huijauslehteä, jota käytän aina kun minun on käytettävä regexiä.

Voin kertoa teille, että regex .replace()JavaScriptillä noudattaa peruskuviota. .replace()ottaa kaksi argumenttia: malli (yleensä säännöllinen lauseke) ja korvaava (voi olla merkkijono tai funktio).

string.replace(regex, function)

Ratkaisumme korvaa kirjaimen jokaisen sanan alussa. Kuinka saamme regexin tekemään tämän puolestamme? Käskemme .replace()vastaamaan mitä tahansa merkkiä, joka seuraa välilyöntiä tai koko merkkijonon ensimmäistä merkkiä (koska merkkijonon ensimmäisessä sanassa ei ole tyhjää tilaa ennen sitä).

Hajotetaan ratkaisumme regex-osa. Voit tehdä sen tarkastelemalla .replace()funktion ensimmäistä argumenttia . Tämä on regex-koodi, joka määrittää, minkä mallin haluamme sovittaa ja korvata.

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

Haluamme viime kädessä löytää kaikki muut kuin välilyönnit, joita edustaa \S.

Sitten haluamme määritellä, että haluamme sovittaa nämä ei-välilyönnin merkit merkkijonon alkuun ^tai |minkä tahansa välilyönnin jälkeen \s.

Lisätään yleinen modifikaattori getsimään ja korvaamaan kaikki tällaiset mallit koko merkkijonosta.

Algoritmi :

  1. Käännä kaikki kirjaimet strpieniksi kirjaimiksi.
  2. Korvaa merkkijonon jokaisen sanan ensimmäinen kirjain isolla kirjaimella.
  3. Palauta otsikkomerkkijono.

Koodi : Katso alla!

Jos sinulla on muita ratkaisuja ja / tai ehdotuksia, jaa kommenteissa!

Tämä artikkeli on osa sarjan freeCodeCamp Algorithm Scripting -sarjaa.

Tässä artikkelissa viitataan freeCodeCamp Basic Algorithm Scripting: Title Case a Lause -sovellukseen

Voit seurata minua Mediumissa, LinkedInissä ja GitHubissa!