Tests:
  • Simple for loop

    x
     
    function repeatify(string, repetitions) {
       if (repetitions < 0 || repetitions === Infinity) {
          throw new RangeError('Invalid repetitions number');
       }
     
       let result = '';
     
       for (let i = 0; i < repetitions; i++) {
          result += string;
       }
     
       return result;
    }
    repeatify('*', 10000);
  • Extended for loop

     
    function repeatify2(string, repetitions) {
       if (repetitions < 0 || repetitions === Infinity) {
          throw new RangeError('Invalid repetitions number');
       }
     
       const isEven = repetitions % 2 === 0;
       const iterations = Math.floor(repetitions / 2);
       const stringTwice = string + string;
     
       let result = '';
     
       for (let i = 0; i < iterations; i++) {
          result += stringTwice;
       }
     
       if (!isEven) {
          result += string;
       }
     
       return result;
    }
    repeatify2('*', 10000);
  • Log based

     
    function repeatify3(string, repetitions) {
       if (repetitions < 0 || repetitions === Infinity) {
          throw new RangeError('Invalid repetitions number');
       }
     
       const cache = new Map();
     
       function repeat(string, repetitions) {
          if (repetitions === 0) {
             return '';
          }
     
          const log = Math.floor(Math.log2(repetitions));
          let result;
     
          if (cache.has(log)) {
             result = cache.get(log);
          } else {
             result = string;
     
             for (let i = 1; i <= log; i++) {
                result += result;
                cache.set(i, result);
             }
          }
     
          const repetitionsProcessed = Math.pow(2, log);
          const repetitionsLeft = repetitions - repetitionsProcessed;
     
          return result + repeat(string, repetitionsLeft);
       }
     
       return repeat(string, repetitions);
    }
    repeatify3('*', 10000);
  • Array approach

     
    function repeatify4(string, repetitions) {
       if (repetitions < 0 || repetitions === Infinity) {
          throw new RangeError('Invalid repetitions number');
       }
     
       return Array(repetitions + 1).join(string);
    }
    repeatify4('*', 10000);
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Simple for loop
    Extended for loop
    Log based
    Array approach

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 8 years ago)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0
Firefox 50 on Mac OS X 10.12
View result in a separate tab
Test name Executions per second
Simple for loop 6040.2 Ops/sec
Extended for loop 11658.2 Ops/sec
Log based 127897.6 Ops/sec
Array approach 1041.9 Ops/sec