Три начина за обръщане на низ в JavaScript

Тази статия се основава на скриптове „Обратен низ“ на алгоритъма „Основен алгоритъм“.

Обръщането на низ е един от най-често задаваните въпроси за JavaScript в техническия кръг на интервюто. Интервюиращите могат да ви помолят да напишете различни начини за обръщане на низ, или може да ви помолят да обърнете низ, без да използвате вградени методи, или дори да поискат да обърнете низ, използвайки рекурсия.

Има потенциално десетки различни начини да го направите, с изключение на вградената функция за обратно движение , тъй като JavaScript няма такъв.

По-долу са моите три най-интересни начина за решаване на проблема с обръщането на низ в JavaScript.

Предизвикателство на алгоритъма

Обърнете предоставения низ.

Може да се наложи да превърнете низа в масив, преди да можете да го обърнете.

Резултатът ви трябва да е низ.

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

Предоставени тестови случаи

  • reverseString („здравей“) трябва да стане „olleh“
  • reverseString („Howdy“) трябва да стане „ydwoH“
  • reverseString („Поздрави от Земята“) трябва да върне „htraE morf sgniteerG“

1. Обърнете низ с вградени функции

За това решение ще използваме три метода: методът String.prototype.split (), методът Array.prototype.reverse () и методът Array.prototype.join ().

  • Методът split () разделя String обект в масив от низ чрез разделяне на низа в поднизове.
  • Методът reverse () обръща масива на място. Първият елемент на масива става последен, а последният става първи.
  • Методът join () обединява всички елементи на масив в низ.
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");

Свързване на трите метода заедно:

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

2. Обърнете низ с декрементиращ за цикъл

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');

Без коментари:

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

3. Обърнете низ с рекурсия

За това решение ще използваме два метода: метода String.prototype.substr () и метода String.prototype.charAt ().

  • Методът substr () връща символите в низ, започващ на определеното място чрез посочения брой символи.
"hello".substr(1); // "ello"
  • Методът charAt () връща посочения знак от низ.
"hello".charAt(0); // "h"

Дълбочината на рекурсията е равна на дължината на String. Това решение не е най-доброто и ще бъде наистина бавно, ако низът е много дълъг и размерът на стека е от голямо значение.

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");

Без коментари:

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

Условен (тернален) оператор:

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

Обръщането на низ в JavaScript е малък и прост алгоритъм, който може да бъде зададен при технически скрининг на телефон или техническо интервю. Можете да предприемете краткия път при решаването на този проблем или да възприемете подхода, като го решите с рекурсия или дори по-сложни решения.

Надявам се, че сте намерили това за полезно. Това е част от поредицата ми статии „Как да реша алгоритми на FCC“ за предизвикателствата на алгоритъма на Free Code Camp, където предлагам няколко решения и обяснявам стъпка по стъпка какво се случва под капака.

Три начина за повторение на низ в JavaScript

В тази статия ще ви обясня как да разрешите предизвикателството на freeCodeCamp „Повторете низ, повторете низ“. Това включва ...

Два начина за потвърждаване на края на низ в JavaScript

В тази статия ще ви обясня как да решите предизвикателството „Потвърдете края“ на freeCodeCamp.

Три начина за факторизиране на число в JavaScript

Тази статия се основава на скриптове за базисен алгоритъм на Free Code Camp „Факторизиране на число“

Два начина за проверка за палиндроми в JavaScript

Тази статия се основава на скриптове за базисен алгоритъм на Free Code Camp „Проверка за палиндроми“.

Три начина за намиране на най-дългата дума в низ в JavaScript

Тази статия се основава на скриптове за основен алгоритъм на Free Code Camp „Намерете най-дългата дума в низ“.

Три начина за озаглавяване на изречение в JavaScript

Тази статия се основава на скриптове за основен алгоритъм на Free Code Camp „Case Case a Sentence“.

Ако имате собствено решение или някакви предложения, споделете ги по-долу в коментарите.

Или можете да ме следвате в Medium , Twitter, Github и LinkedIn , веднага след като щракнете върху зеленото сърце отдолу ;-)

# Останете любопитни, # KeepOnHacking & # MakeItHappen!

Ресурси

  • метод split () - MDN
  • метод на обратен () - MDN
  • метод join () - MDN
  • String.length - MDN
  • метод substr () - MDN
  • метод charAt () - MDN