In this freeCodeCamp algorithm, we need to come up with a way to repeat a given string a specified amount of times.

For Example
If were given the string "code" and we are to repeat it 5 times, the result should return "codecodecodecodecode".

If number of times to repeat string is not a positive number we will return an empty string.

Spec

  • 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 ""
  • The built-in repeat() method should not be used

Psuedocode

Given the specification of the problem, we can use psuedocode to see how we can approach this. Here's what I came up with:

// Create a function that accepts two arguments, str and num
    
    // Create an array to store the repeated str
    
    // Create a check for when num is not a positive number
    
    // Create a loop that pushes str to array num times
    
    // Join the repeated str and return it

Solving the Algorithm

Setting up the function

We can use the basic boilerplate function from freeCodeCamp to start:

function repeatStringNumTimes(str, num) {
  // repeat after me
  return str;
}

repeatStringNumTimes("abc", 3);

Adding array to store the repeated string

My thinking with this was that we can create a loop that will repeat str num times, and every time we repeat str, we can just store it in this array. Once we're done we can return all of the values of the array as a single string.

function repeatStringNumTimes(str, num) {
  // repeat after me
  const repeatedStr = [];
  
  return str;
}

repeatStringNumTimes("abc", 3);

Check if num is not positive

According to the specification, if num is not positive then we must return an empty string.

function repeatStringNumTimes(str, num) {
  // repeat after me
  const repeatedStr = [];
  
  if (num < 1) {
    return "";
  }
  
  return str;
}

repeatStringNumTimes("abc", 3);

Repeat str

Here's where the bulk of the logic will come from. We can create a for-loop that will repeat str however many times that num specifies.

Once we repeat str, we can use the Array.push() method to add it to our repeatedStr array.

function repeatStringNumTimes(str, num) {
  // repeat after me

  var repeatedStr = [];

  if(num < 1) {
    return "";
  }

  for(var i = 0; i < num; i++) {
    repeatedStr.push(str);
  }
}

repeatStringNumTimes("abc", 3);

Join the repeatedStr array and return result

Now that we have str being repeated num times and being added to repeatedStr we need to find a way to convert repeatedStr into one big string and get rid of the commas.

For example
If we ran our function as repeatStringNumTimes("code", "5"); and were to look at repeatedStr it would look something like this: ["code", "code", "code", "code", "code"]. However, we want to make sure it's returned as "codecodecodecodecode", which is a String, and not an Array

Lucky for us, there's a handy method called Array.join() which we can use to convert all of the items in an array to a single string.

From the specification of Array.join(), if we are to pass in an empty string as the separator parameter then it will join all of the items together without spaces or commas. This is exactly what we want!

function repeatStringNumTimes(str, num) {
  // repeat after me

  var repeatedStr = [];

  if(num < 1) {
    return "";
  }

  for(var i = 0; i < num; i++) {
    repeatedStr.push(str);
  }

  return repeatedStr.join('');
}

repeatStringNumTimes("abc", 3);

Try this the code snippet in your browser console.

Recap

We were able to solve this freeCodeCamp algorithm by breaking down the requirements and using a for-loop, the Array.push() method, and the Array.join() method. Hopefully you found this walk through helpful and if you have a solution of your own I'd love to see it!

Shoot me an email at tim@timwheeler.com with any questions and if you enjoyed this, stay tuned and subscribe below! 👇