Left zero pad (v4)

Revision 4 of this benchmark created by Kim on


Description

Belonging to this question on StackOverflow.

Setup

var numsToPad = [
      [1, 100],
      [-123, 4],
      [5.619, 7],
      [1234567890, 2]
    ];
    
    function f1(n, w) {
      w -= n.toString().length;
      if (w > 0) return new Array(w + (/\./.test(n) ? 2 : 1)).join('0') + n;
      return str = n + "";
    }
    
    function f2(n, w) {
      pad = n.toString();
      while (pad.length < w) pad = "0" + pad;
      return (pad + n).slice(-pad.length);
    }
    
    function f3(n, w) {
      var n_ = Math.abs(n);
      var zeros = Math.max(0, w - Math.floor(n_).toString().length);
      var zeroString = Math.pow(10, zeros).toString().substr(1);
      if (n < 0) {
        zeroString = '-' + zeroString;
      }
    
      return zeroString + n;
    }
    
    // From: http://jsperf.com/string-repeat-polyfill
    function repeat(times) {
          if (times <= 0) return '';
          if (times === 1) return this;
          var result = '',
            temp = this;
          while (times > 0) {
            if (times & 1) result += temp;
            if (times >>= 1) temp += temp;
          }
          return result;
        }
    
    
    if (! String.prototype.hasOwnProperty('repeat')) {
     String.prototype.repeat = repeat;
    }
    
    function f4(number, digits) {
        var num = Math.abs(number)+"";
        num = '0'.repeat(Math.max(digits - num.length, 0)) + num;
        return number < 0 ? '-'+num : num;
    }
    
     String.prototype.repeat1 = repeat;
    
    function f5(number, digits) {
        var num = Math.abs(number)+"";
        num = '0'.repeat1(Math.max(digits - num.length, 0)) + num;
        return number < 0 ? '-'+num : num;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Peter Bailey's
f1(numsToPad[0][0], numsToPad[0][1]);
f1(numsToPad[1][0], numsToPad[1][1]);
f1(numsToPad[2][0], numsToPad[2][1]);
f1(numsToPad[3][0], numsToPad[3][1]);
ready
profitehlolz's
f2(numsToPad[0][0], numsToPad[0][1]);
f2(numsToPad[1][0], numsToPad[1][1]);
f2(numsToPad[2][0], numsToPad[2][1]);
f2(numsToPad[3][0], numsToPad[3][1]);
ready
coderjoe's
f3(numsToPad[0][0], numsToPad[0][1]);
f3(numsToPad[1][0], numsToPad[1][1]);
f3(numsToPad[2][0], numsToPad[2][1]);
f3(numsToPad[3][0], numsToPad[3][1]);
ready
Using String.repeat
f4(numsToPad[0][0], numsToPad[0][1]);
f4(numsToPad[1][0], numsToPad[1][1]);
f4(numsToPad[2][0], numsToPad[2][1]);
f4(numsToPad[3][0], numsToPad[3][1]);
ready
Using polyfill for String.repeat
f5(numsToPad[0][0], numsToPad[0][1]);
f5(numsToPad[1][0], numsToPad[1][1]);
f5(numsToPad[2][0], numsToPad[2][1]);
f5(numsToPad[3][0], numsToPad[3][1]);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.