Три способи змінити рядок у JavaScript

Ця стаття заснована на сценарії базового алгоритму табору Free Code Camp «Зворот рядка»

Зміна рядка - одне з найпоширеніших питань 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"

Глибина рекурсії дорівнює довжині рядка. Це рішення не найкраще і буде дуже повільним, якщо рядок дуже довгий і розмір стека викликає велике занепокоєння.

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” про виклики, пов’язані з алгоритмом табору вільного коду, де я пропоную кілька рішень і покроково пояснюю, що відбувається під капотом.

Три способи повторити рядок у JavaScript

У цій статті я розтлумачу, як вирішити завдання freeCodeCamp "Повторити рядок, повторити рядок". Це передбачає ...

Два способи підтвердити закінчення рядка в JavaScript

У цій статті я поясню, як вирішити проблему freeCodeCamp "Підтвердити закінчення".

Три способи розкласти число на множники в JavaScript

Ця стаття заснована на сценарії базового алгоритму табору Free Code Camp “Розділення числа на факториали”

Два способи перевірити паліндроми в JavaScript

Ця стаття заснована на сценарії базового алгоритму табору Free Code Camp «Перевірка паліндромів».

Три способи знайти найдовше слово в рядку в JavaScript

Ця стаття заснована на сценарії базового алгоритму табору Free Code Camp «Знайди найдовше слово в рядку».

Три способи озаглавити речення у JavaScript

Ця стаття заснована на сценарії базового алгоритму табору Free Code Camp “Заголовок - вирок”.

Якщо у вас є власне рішення чи будь-які пропозиції, поділіться ними нижче в коментарях.

Або ви можете стежити за мною на Medium , Twitter, Github та LinkedIn , відразу після того, як ви натиснете зелене серце внизу ;-)

‪#‎StayCurious‬, ‪#‎KeepOnHacking‬ & ‪#‎MakeItHappen‬!

Resources

  • split() method — MDN
  • reverse() method — MDN
  • join() method — MDN
  • String.length — MDN
  • substr() method — MDN
  • charAt() method — MDN