Trys būdai, kaip pakeisti eilutę „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Stygos pakeitimas“

Stygos pakeitimas yra vienas iš dažniausiai užduodamų „JavaScript“ klausimų techniniame interviu etape. Interviu dalyviai gali paprašyti parašyti skirtingus eilutės keitimo būdus arba paprašyti pakeisti eilutę nenaudojant įdiegtų metodų, arba netgi paprašyti pakeisti eilutę naudojant rekursiją.

Galima tai padaryti dešimtimis skirtingų būdų, išskyrus integruotą atgalinę funkciją, nes „JavaScript“ jos neturi.

Žemiau pateikiami trys mano įdomiausi būdai, kaip išspręsti eilutės pakeitimo „JavaScript“ problemą.

Algoritmo iššūkis

Apverskite pateiktą eilutę.

Jums gali tekti paversti eilutę masyvu, kad galėtumėte ją pakeisti.

Rezultatas turi būti eilutė.

function reverseString(str) { return str; } reverseString("hello");

Pateikti bandymo atvejai

  • „reverseString“ („labas“) turėtų tapti „olleh“
  • reverseString („Howdy“) turėtų tapti „ydwoH“
  • „reverseString“ („Sveikinimai iš Žemės“) turėtų grąžinti „htraE morf sgniteerG“

1. Atvirkštinė eilutė su įmontuotomis funkcijomis

Šiam sprendimui naudosime tris metodus: String.prototype.split () metodą, Array.prototype.reverse () metodą ir Array.prototype.join () metodą.

  • Split () metodas padalija String objektą į eilutės masyvą, atskirdamas eilutę į sub eilutes.
  • Atvirkštinis () metodas pakeičia masyvą vietoje. Pirmasis masyvo elementas tampa paskutiniu, o paskutinis - pirmuoju.
  • „Join ()“ metodas sujungia visus masyvo elementus į eilutę.
function reverseString(str) { // Step 1. Use the split() method to return a new array var splitString = str.split(""); // var splitString = "hello".split(""); // ["h", "e", "l", "l", "o"] // Step 2. Use the reverse() method to reverse the new created array var reverseArray = splitString.reverse(); // var reverseArray = ["h", "e", "l", "l", "o"].reverse(); // ["o", "l", "l", "e", "h"] // Step 3. Use the join() method to join all elements of the array into a string var joinArray = reverseArray.join(""); // var joinArray = ["o", "l", "l", "e", "h"].join(""); // "olleh" //Step 4. Return the reversed string return joinArray; // "olleh" } reverseString("hello");

Susieti tris metodus kartu:

function reverseString(str) { return str.split("").reverse().join(""); } reverseString("hello");

2. Atvirkštinė eilutė su mažinančia kilpa

function reverseString(str) { // Step 1. Create an empty string that will host the new created string var newString = ""; // Step 2. Create the FOR loop /* The starting point of the loop will be (str.length - 1) which corresponds to the last character of the string, "o" As long as i is greater than or equals 0, the loop will go on We decrement i after each iteration */ for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; // or newString = newString + str[i]; } /* Here hello's length equals 5 For each iteration: i = str.length - 1 and newString = newString + str[i] First iteration: i = 5 - 1 = 4, newString = "" + "o" = "o" Second iteration: i = 4 - 1 = 3, newString = "o" + "l" = "ol" Third iteration: i = 3 - 1 = 2, newString = "ol" + "l" = "oll" Fourth iteration: i = 2 - 1 = 1, newString = "oll" + "e" = "olle" Fifth iteration: i = 1 - 1 = 0, newString = "olle" + "h" = "olleh" End of the FOR Loop*/ // Step 3. Return the reversed string return newString; // "olleh" } reverseString('hello');

Be komentarų:

function reverseString(str) { var newString = ""; for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; } return newString; } reverseString('hello');

3. Atvirkštinė eilutė su rekursija

Šiam sprendimui naudosime du metodus: String.prototype.substr () metodą ir String.prototype.charAt () metodą.

  • Metodas „substr“ () pateikia eilutės simbolius, prasidedančius nurodytoje vietoje per nurodytą simbolių skaičių.
"hello".substr(1); // "ello"
  • Metodas charAt () grąžina nurodytą simbolį iš eilutės.
"hello".charAt(0); // "h"

Rekursijos gylis yra lygus stygos ilgiui. Šis sprendimas nėra geriausias ir bus tikrai lėtas, jei stygos yra labai ilgos ir kamino dydis kelia didelį nerimą.

function reverseString(str) { if (str === "") // This is the terminal case that will end the recursion return ""; else return reverseString(str.substr(1)) + str.charAt(0); /* First Part of the recursion method You need to remember that you won’t have just one call, you’ll have several nested calls Each call: str === "?" reverseString(str.subst(1)) + str.charAt(0) 1st call – reverseString("Hello") will return reverseString("ello") + "h" 2nd call – reverseString("ello") will return reverseString("llo") + "e" 3rd call – reverseString("llo") will return reverseString("lo") + "l" 4th call – reverseString("lo") will return reverseString("o") + "l" 5th call – reverseString("o") will return reverseString("") + "o" Second part of the recursion method The method hits the if condition and the most highly nested call returns immediately 5th call will return reverseString("") + "o" = "o" 4th call will return reverseString("o") + "l" = "o" + "l" 3rd call will return reverseString("lo") + "l" = "o" + "l" + "l" 2nd call will return reverserString("llo") + "e" = "o" + "l" + "l" + "e" 1st call will return reverserString("ello") + "h" = "o" + "l" + "l" + "e" + "h" */ } reverseString("hello");

Be komentarų:

function reverseString(str) { if (str === "") return ""; else return reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");

Sąlyginis (trijų dalių) operatorius:

function reverseString(str) { return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");

Stygos pakeitimas „JavaScript“ yra mažas ir paprastas algoritmas, kurio galima paprašyti atliekant techninę telefono patikrą ar atliekant techninį interviu. Norėdami išspręsti šią problemą, galite eiti trumpu keliu arba pasinaudoti rekursija ar dar sudėtingesniais sprendimais.

Tikiuosi, kad jums tai buvo naudinga. Tai yra mano straipsnių apie „Kaip išspręsti FCC algoritmus“ tema „Laisvojo kodo stovyklos algoritmo iššūkiai“ dalis, kur aš siūlau keletą sprendimų ir žingsnis po žingsnio paaiškinu, kas vyksta po gaubtu.

Trys būdai, kaip pakartoti eilutę „JavaScript“

Šiame straipsnyje paaiškinsiu, kaip išspręsti „freeCodeCamp“ iššūkį „Pakartokite eilutę pakartokite eilutę“. Tai apima…

Du būdai patvirtinti eilutės pabaigą „JavaScript“

Šiame straipsnyje paaiškinsiu, kaip išspręsti „freeCodeCamp“ iššūkį „Patvirtinti pabaigą“.

Trys būdai, kaip apskaičiuoti skaičių „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Skaičiaus nustatymas“

Du būdai patikrinti, ar „JavaScript“ nėra palindromų

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinių algoritmų scenarijų „Palindromų tikrinimas“.

Trys būdai, kaip rasti ilgiausią „JavaScript“ eilutės žodį

Šis straipsnis yra paremtas „Free Code Camp“ pagrindinių algoritmų scenarijais „Raskite ilgiausią eilutės žodį“.

Trys būdai, kaip įvesti sakinį „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Pavadinimo atvejis sakiniu“.

Jei turite savo sprendimą ar kokių nors pasiūlymų, pasidalykite jais toliau komentaruose.

Arba galite sekti mane „ Medium“ , „Twitter“, „Github“ ir „ LinkedIn“ , iškart po to, kai spustelėsite žalią širdį žemiau ;-)

# StayCurious, # KeepOnHacking ir # MakeItHappen!

Ištekliai

  • split () metodas - MDN
  • atvirkštinis () metodas - MDN
  • prisijungimo () metodas - MDN
  • Styginių ilgis - MDN
  • substr () metodas - MDN
  • charAt () metodas - MDN