Repeat a string in JavaScript a number of times

JavascriptStringCharacterRepeat

Javascript Problem Overview


In Perl I can repeat a character multiple times using the syntax:

$a = "a" x 10; // results in "aaaaaaaaaa"

Is there a simple way to accomplish this in Javascript? I can obviously use a function, but I was wondering if there was any built in approach, or some other clever technique.

Javascript Solutions


Solution 1 - Javascript

These days, the repeat string method is implemented almost everywhere. (It is not in Internet Explorer.) So unless you need to support older browsers, you can simply write:

"a".repeat(10)

Before repeat, we used this hack:

Array(11).join("a") // create string with 10 a's: "aaaaaaaaaa"

(Note that an array of length 11 gets you only 10 "a"s, since Array.join puts the argument between the array elements.)

Simon also points out that according to this benchmark, it appears that it's faster in Safari and Chrome (but not Firefox) to repeat a character multiple times by simply appending using a for loop (although a bit less concise).

Solution 2 - Javascript

In a new ES6 harmony, you will have native way for doing this with repeat. Also ES6 right now only experimental, this feature is already available in Edge, FF, Chrome and Safari

"abc".repeat(3) // "abcabcabc"

And surely if repeat function is not available you can use old-good Array(n + 1).join("abc")

Solution 3 - Javascript

Convenient if you repeat yourself a lot:

String.prototype.repeat = String.prototype.repeat || function(n){
  n= n || 1;
  return Array(n+1).join(this);
}

alert(  'Are we there yet?\nNo.\n'.repeat(10)  )

Solution 4 - Javascript

Array(10).fill('a').join('')

Although the most voted answer is a bit more compact, with this approach you don't have to add an extra array item.

Solution 5 - Javascript

An alternative is:

for(var word = ''; word.length < 10; word += 'a'){}

If you need to repeat multiple chars, multiply your conditional:

for(var word = ''; word.length < 10 * 3; word += 'foo'){}

NOTE: You do not have to overshoot by 1 as with word = Array(11).join('a')

Solution 6 - Javascript

The most performance-wice way is https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat

Short version is below.

  String.prototype.repeat = function(count) {
    if (count < 1) return '';
    var result = '', pattern = this.valueOf();
    while (count > 1) {
      if (count & 1) result += pattern;
      count >>>= 1, pattern += pattern;
    }
    return result + pattern;
  };
  var a = "a";
  console.debug(a.repeat(10));

Polyfill from Mozilla:

if (!String.prototype.repeat) {
  String.prototype.repeat = function(count) {
    'use strict';
    if (this == null) {
      throw new TypeError('can\'t convert ' + this + ' to object');
    }
    var str = '' + this;
    count = +count;
    if (count != count) {
      count = 0;
    }
    if (count < 0) {
      throw new RangeError('repeat count must be non-negative');
    }
    if (count == Infinity) {
      throw new RangeError('repeat count must be less than infinity');
    }
    count = Math.floor(count);
    if (str.length == 0 || count == 0) {
      return '';
    }
    // Ensuring count is a 31-bit integer allows us to heavily optimize the
    // main part. But anyway, most current (August 2014) browsers can't handle
    // strings 1 << 28 chars or longer, so:
    if (str.length * count >= 1 << 28) {
      throw new RangeError('repeat count must not overflow maximum string size');
    }
    var rpt = '';
    for (;;) {
      if ((count & 1) == 1) {
        rpt += str;
      }
      count >>>= 1;
      if (count == 0) {
        break;
      }
      str += str;
    }
    // Could we try:
    // return Array(count + 1).join(this);
    return rpt;
  }
}

Solution 7 - Javascript

If you're not opposed to including a library in your project, lodash has a repeat function.

_.repeat('*', 3);
// → '***

https://lodash.com/docs#repeat

Solution 8 - Javascript

For all browsers

The following function will perform a lot faster than the option suggested in the accepted answer:

var repeat = function(str, count) {
    var array = [];
    for(var i = 0; i < count;)
        array[i++] = str;
    return array.join('');
}

You'd use it like this :

var repeatedString = repeat("a", 10);

To compare the performance of this function with that of the option proposed in the accepted answer, see this Fiddle and this Fiddle for benchmarks.

For moderns browsers only

In modern browsers, you can now do this using String.prototype.repeat method:

var repeatedString = "a".repeat(10);

Read more about this method on MDN.

This option is even faster. Unfortunately, it doesn't work in any version of Internet explorer. The numbers in the table specify the first browser version that fully supports the method:

enter image description here

Solution 9 - Javascript

In ES2015/ES6 you can use "*".repeat(n)

So just add this to your projects, and your are good to go.

  String.prototype.repeat = String.prototype.repeat || 
    function(n) {
      if (n < 0) throw new RangeError("invalid count value");
      if (n == 0) return "";
      return new Array(n + 1).join(this.toString()) 
    };

Solution 10 - Javascript

/**  
 * Repeat a string `n`-times (recursive)
 * @param {String} s - The string you want to repeat.
 * @param {Number} n - The times to repeat the string.
 * @param {String} d - A delimiter between each string.
 */

var repeat = function (s, n, d) {
    return --n ? s + (d || "") + repeat(s, n, d) : "" + s;
};

var foo = "foo";
console.log(
    "%s\n%s\n%s\n%s",

    repeat(foo),        // "foo"
    repeat(foo, 2),     // "foofoo"
    repeat(foo, "2"),   // "foofoo"
    repeat(foo, 2, "-") // "foo-foo"
);

Solution 11 - Javascript

Another interesting way to quickly repeat n character is to use idea from quick exponentiation algorithm:

var repeatString = function(string, n) {
    var result = '', i;

    for (i = 1; i <= n; i *= 2) {
        if ((n & i) === i) {
            result += string;
        }
        string = string + string;
    }

    return result;
};

Solution 12 - Javascript

For repeat a value in my projects i use repeat

For example:

var n = 6;
for (i = 0; i < n; i++) {
    console.log("#".repeat(i+1))
}

but be careful because this method has been added to the ECMAScript 6 specification.

Solution 13 - Javascript

function repeatString(n, string) {
  var repeat = [];
  repeat.length = n + 1;
  return repeat.join(string);
}

repeatString(3,'x'); // => xxx
repeatString(10,'🌹'); // => "🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹"

Solution 14 - Javascript

Here is what I use:

function repeat(str, num) {
		var holder = [];
		for(var i=0; i<num; i++) {
			holder.push(str);
		}
		return holder.join('');
	}

Solution 15 - Javascript

Right pads with zeros with no arrays or loops. Just uses repeat() using ES6 2015, which has wide support now. Left pads if you switch the concatenation.

function pad(text, maxLength){ 
  var res = text + "0".repeat(maxLength - text.length);
  return res;
}

console.log(pad('hello', 8)); //hello000

Solution 16 - Javascript

Just for the fun of it, here is another way by using the toFixed(), used to format floating point numbers.

By doing

(0).toFixed(2)
(0).toFixed(3)
(0).toFixed(4)

we get

0.00
0.000
0.0000

If the first two characters 0. are deleted, we can use this repeating pattern to generate any repetition.

function repeat(str, nTimes) {
  return (0).toFixed(nTimes).substr(2).replaceAll('0', str);
}

console.info(repeat('3', 5));
console.info(repeat('hello ', 4));

Solution 17 - Javascript

I'm going to expand on @bonbon's answer. His method is an easy way to "append N chars to an existing string", just in case anyone needs to do that. For example since "a google" is a 1 followed by 100 zeros.

for(var google = '1'; google.length < 1 + 100; google += '0'){} document.getElementById('el').innerText = google;

<div>This is "a google":</div>
<div id="el"></div>

NOTE: You do have to add the length of the original string to the conditional.

Solution 18 - Javascript

Lodash offers a similar functionality as the Javascript repeat() function which is not available in all browers. It is called _.repeat and available since version 3.0.0:

_.repeat('a', 10);

Solution 19 - Javascript

var stringRepeat = function(string, val) {
  var newString = [];
	for(var i = 0; i < val; i++) {
  	  newString.push(string);
  }
  return newString.join('');
}

var repeatedString = stringRepeat("a", 1);

Solution 20 - Javascript

Can be used as a one-liner too:

function repeat(str, len) {
    while (str.length < len) str += str.substr(0, len-str.length);
    return str;
}

Solution 21 - Javascript

In CoffeeScript:

( 'a' for dot in [0..10]).join('')

Solution 22 - Javascript

this is how you can call a function and get the result by the helps of Array() and join()

function repeatStringNumTimes(str, num) {
  // repeat after me
  return num > 0 ? Array(num+1).join(str) : "";
}

console.log(repeatStringNumTimes("a",10))

Solution 23 - Javascript

I realize that it's not a popular task, what if you need to repeat your string not an integer number of times?

It's possible with repeat() and slice(), here's how:

String.prototype.fracRepeat = function(n){
  if(n < 0) n = 0;
  var n_int = ~~n; // amount of whole times to repeat
  var n_frac = n - n_int; // amount of fraction times (e.g., 0.5)
  var frac_length = ~~(n_frac * this.length); // length in characters of fraction part, floored
  
  return this.repeat(n) + this.slice(0, frac_length);
}

And below a shortened version:

String.prototype.fracRepeat = function(n){
   if(n < 0) n = 0;
   return this.repeat(n) + this.slice(0, ~~((n - ~~n) * this.length));
}

var s = "abcd";
console.log(s.fracRepeat(2.5))

Solution 24 - Javascript

String.prototype.repeat = function (n) { n = Math.abs(n) || 1; return Array(n + 1).join(this || ''); };

// console.log("0".repeat(3) , "0".repeat(-3))
// return: "000" "000"

Solution 25 - Javascript

Here is an ES6 version

const repeat = (a,n) => Array(n).join(a+"|$|").split("|$|");
repeat("A",20).forEach((a,b) => console.log(a,b+1))

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSteveView Question on Stackoverflow
Solution 1 - JavascriptJason OrendorffView Answer on Stackoverflow
Solution 2 - JavascriptSalvador DaliView Answer on Stackoverflow
Solution 3 - JavascriptkennebecView Answer on Stackoverflow
Solution 4 - JavascriptGrzegorz PawlikView Answer on Stackoverflow
Solution 5 - JavascriptbonbonView Answer on Stackoverflow
Solution 6 - JavascriptKonstantin VictorovView Answer on Stackoverflow
Solution 7 - JavascriptNathan DangerView Answer on Stackoverflow
Solution 8 - JavascriptJohn SlegersView Answer on Stackoverflow
Solution 9 - JavascriptwebdebView Answer on Stackoverflow
Solution 10 - JavascriptyckartView Answer on Stackoverflow
Solution 11 - JavascriptcsharpfolkView Answer on Stackoverflow
Solution 12 - JavascriptEzequiel GarcíaView Answer on Stackoverflow
Solution 13 - JavascriptalejandroView Answer on Stackoverflow
Solution 14 - JavascriptKoushik DasView Answer on Stackoverflow
Solution 15 - JavascriptVictor StoddardView Answer on Stackoverflow
Solution 16 - JavascriptJose Rui SantosView Answer on Stackoverflow
Solution 17 - JavascriptBruno BronoskyView Answer on Stackoverflow
Solution 18 - Javascript0x4a6f4672View Answer on Stackoverflow
Solution 19 - JavascriptFilthView Answer on Stackoverflow
Solution 20 - JavascriptSarsaparillaView Answer on Stackoverflow
Solution 21 - JavascriptDavid MendezView Answer on Stackoverflow
Solution 22 - JavascriptAmir DanishView Answer on Stackoverflow
Solution 23 - JavascriptnicaelView Answer on Stackoverflow
Solution 24 - JavascriptCaglayan ALTINCIView Answer on Stackoverflow
Solution 25 - JavascriptMaxaliView Answer on Stackoverflow