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

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

Є три підходи, які я розгляну:

  1. за допомогою циклу while
  2. за допомогою рекурсії
  3. за допомогою методу ES6 repeat ()

Опис виклику алгоритму

Повторіть заданий рядок (перший аргумент) numразів (другий аргумент). Поверніть порожній рядок, якщо numне є додатним числом.
function repeatStringNumTimes(str, num) { return str; } repeatStringNumTimes("abc", 3);

Надані тестові кейси

repeatStringNumTimes("*", 3) should return "***". repeatStringNumTimes("abc", 3) should return "abcabcabc". repeatStringNumTimes("abc", 4) should return "abcabcabcabc". repeatStringNumTimes("abc", 1) should return "abc". repeatStringNumTimes("*", 8) should return "********". repeatStringNumTimes("abc", -2) should return "".

Підхід No1: Повторіть рядок з циклічною петлею

Оператор while виконує свій оператор, якщо вказана умова має значення true.

Заява while виглядає так:

while (condition) statement

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

Оператор виконується до тих пір, поки умова відповідає істині. Ось рішення:

 function repeatStringNumTimes(string, times) { // Step 1. Create an empty string that will host the repeated string var repeatedString = ""; // Step 2. Set the While loop with (times > 0) as the condition to check while (times > 0) { // As long as times is greater than 0, the statement is executed // The statement repeatedString += string; // Same as repeatedString = repeatedString + string; times--; // Same as times = times - 1; } /* While loop logic Condition T/F repeatedString += string repeatedString times First iteration (3 > 0) true "" + "abc" "abc" 2 Second iteration (2 > 0) true "abc" + "abc" "abcabc" 1 Third iteration (1 > 0) true "abcabc" + "abc" "abcabcabc" 0 Fourth iteration (0 > 0) false } */ // Step 3. Return the repeated string return repeatedString; // "abcabcabc" } repeatStringNumTimes("abc", 3);

І знову, без коментарів:

function repeatStringNumTimes(string, times) { var repeatedString = ""; while (times > 0) { repeatedString += string; times--; } return repeatedString; } repeatStringNumTimes("abc", 3);

Підхід №2: Повторіть рядок, використовуючи умовний та рекурсійний

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

  • Перший - це базовий випадок : це твердження, як правило, в умовному реченні типу if, що зупиняє рекурсію.
  • Другий - це рекурсивний випадок : це твердження, де рекурсивна функція викликається сама по собі.

Ось рішення:

function repeatStringNumTimes(string, times) { // Step 1. Check if times is negative and return an empty string if true if (times  if (times === 1) return string; 4th call 0 "" => if (times <= 0) return ""; Second part of the recursion method 4th call will return "" 3rd call will return "abc" 2nd call will return "abc" 1st call will return "abc" The final call is a concatenation of all the strings return "abc" + "abc" + "abc"; // return "abcabcabc"; */ } repeatStringNumTimes("abc", 3);

І знову, без коментарів:

function repeatStringNumTimes(string, times) { if(times < 0) return ""; if(times === 1) return string; else return string + repeatStringNumTimes(string, times - 1); } repeatStringNumTimes("abc", 3);

Підхід №3: Повторіть рядок методом ES6 repeat ()

Для цього рішення ви будете використовувати метод String.prototype.repeat ():

  • У repeat()методі конструкції і повертає новий рядок , яка містить певної кількості копій рядки , на якій він був покликаний, зчепленими разом.

Ось рішення:

 function repeatStringNumTimes(string, times) { //Step 1. If times is positive, return the repeated string if (times > 0) { // (3 > 0) => true return string.repeat(times); // return "abc".repeat(3); => return "abcabcabc"; } //Step 2. Else if times is negative, return an empty string if true else { return ""; } } repeatStringNumTimes("abc", 3);

І знову, без коментарів:

function repeatStringNumTimes(string, times) { if (times > 0) return string.repeat(times); else return ""; } repeatStringNumTimes("abc", 3);

Ви можете використовувати тернарний оператор як ярлик для оператора if / else, наприклад:

times > 0 ? string.repeat(times) : "";

Це можна прочитати як:

if (times > 0) { return string.repeat(times); } else { return ""; }

Потім ви можете повернути тернарний оператор у своїй функції:

Сподіваюсь, вам це було корисно. Це частина мого циклу статей “Як вирішити алгоритми FCC”, присвячених проблемам алгоритму freeCodeCamp, де я пропоную кілька рішень і покроково пояснюю, що відбувається під капотом.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# Будьте цікаві, # KeepOnHacking & # MakeItHappen!

Додаткові ресурси

  • while цикл - MDN
  • метод repeat () - MDN
  • рекурсія - МДН
  • Тернарний оператор - MDN