Три начина за повторение на низ в 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 "".

Подход №1: Повторете низ с цикъл за време

Операторът 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

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

Три начина за факторизиране на число в 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!

Допълнителни ресурси

  • while цикъл - MDN
  • метод repeat () - MDN
  • рекурсия - MDN
  • Третичен оператор - MDN