Original article: Three Ways to Reverse a String in JavaScript
Kureverse string ni mojawapo ya maswali ya JavaScript yanayoulizwa mara kwa mara katika awamu ya kiufundi ya mahojiano. Wasaili wanaweza kukuuliza uandike njia tofauti za kureverse string, au wanaweza kukuuliza ureverse string bila kutumia mbinu zilizojengwa ndani (in-built methods), au wanaweza kukuuliza kureverse string kwa kutumia urejeshaji (recursion).
Kuna uwezekano wa njia kumi tofauti za kureverse string, ukiondoa kitendakazi cha reverse kilichojengwa ndani, kwani Javascript haina hata moja.
Zifuatazo ni njia tatu za kuvutia za kutatua tatizo la kureverse string katika Javascript. Kumbuka nakala hii inaendana na masomo ya freeCodeCamp ya Basic Algorithm Scripting "Reverse a String".
Hii ni interactive Scrim inaonyesha jinsi ya kureverse String katika Javascript.
Changamoto ya Algorithm
Reverse string ifuatayo:
Huenda ukahitaji kugeuza string kuwa array kabla ya kuireverse.
Jibu lako lazima liwe string.
function reverseString(str) {
return str;
}
reverseString("hello");
Test cases zilizotolewa:
- reverseString(“hello”) inakuwa kuwa “olleh”
- reverseString(“Howdy”) inakuwa kuwa “ydwoH”
- reverseString(“Greetings from Earth”) inakuwa kuwa”htraE morf sgniteerG”
1. Geuza String kwa kutumia Built-In Functions
Kwa suluhisho hili, tutatumia njia tatu: njia ya String.prototype.split(), Array.prototype.reverse() na Array.prototype.join() .
- Njia ya Split() inagawanya String kuwa array ya string kwa kutenganisha string kuwa string ndogo ndogo.
- Njia ya reverse() inageuza array. Kipengele cha array cha kwanza kinakuwa cha mwisho na cha mwisho kinakuwa cha kwanza.
- Njia ya join() inaunganisha vipengele vyote vya array kuwa string.
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");
Unganisha njia tatu pamoja:
function reverseString(str) {
return str.split("").reverse().join("");
}
reverseString("hello");
2. Geuza String kwa kupunguza For Loop
function reverseString(str) {
// hatua ya 1. Tengeneza string tupu ambayo itaweza string itakayotengenezwa
var newString = "";
// hatua ya 2. Tengeneza For loop
/* Pa kuanzia kwenye loop itakuwa (st.length -1) ambayo yanahusiana na herufi ya mwisho kwenye string,"o"
ili mradi i ni kubwa kuliko au sawa na 0, loop itaendelea
Tutapunguza i baada ya kila mzunguko */
for (var i = str.length - 1; i >= 0; i--) {
newString += str[i]; // or newString = newString + str[i];
}
/* hapa urefu wa hello length ni sawa na 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"
Mwisho wa FOR Loop*/
// Hatua ya 3. Rudisha string iliyogeuzwa
return newString; // "olleh"
}
reverseString('hello');
Bila ya maoni (comments):
function reverseString(str) {
var newString = "";
for (var i = str.length - 1; i >= 0; i--) {
newString += str[i];
}
return newString;
}
reverseString('hello');
3. Geuza String kwa kutumia Recursion
Kwa suluhisho hili, tutatumia njia mbili: String.prototype.substr() na njia ya String.prototype.charAt() .
- Njia ya substr() inarudisha herufi kutoka kwenye string kuanzia eneo lililotajwa kupitia nambari maalum za herufi.
"hello".substr(1); // "ello"
- Njia ya chartAt() inarudisha herufi maalumu kutoka kwenye string.
"hello".charAt(0); // "h"
Kina cha recursion ni sawa na urefu wa String. Suluhisho hili sio bora zaidi na itafanyika polepole kama string ni ndefu na saizi ya stack ni jambo kubwa sana.
function reverseString(str) {
if (str === "") // Hii ni termnial case ambayo itamaliza recursion
return "";
else
return reverseString(str.substr(1)) + str.charAt(0);
/*
Sehemu ya kwanza ya njia ya recursion
Unahitaji kukumbuka kuwa hutakuwa na call moja, utakuwa na calls kadhaa zinazofuatana.
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"
Sehemu ya pili ya njia ya recursion
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");
Bila maoni (comments):
function reverseString(str) {
if (str === "")
return "";
else
return reverseString(str.substr(1)) + str.charAt(0);
}
reverseString("hello");
Opereta ya Masharti (Ternary):
function reverseString(str) {
return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);
}
reverseString("hello");
Geuza String katika Javascript ni algorithm ndogo na rahisi inayoweza kuulizwa kwenye mahojiano ya kiufundi kupitia simu au moja kwa moja. Unaweza kuchukua njia fupi katika kutatua tatizo hili au kuchukua mbinu kwa kulitatua kwa kutumia recursion au au hata masuluhisho changamano zaidi (complex solution).
Natumaini njia hii umeiona ya msaada zaidi. Hii ni sehemu ya mfululizo wa makala ya "Jinsi ya Kutatua Algorithms za FCC" kwenye Changamoto za Algorithm za Free Code Camp, ambapo ninapendekeza suluhisho mbalimbali na kuelezea hatua-kwa-hatua juu ya nini kinachotokea.