Ways to 0-pad a number (v15)

Revision 15 of this benchmark created by Gunther Brunner on


Description

There are lots of ways to zero-pad a number in JavaScript. Which is fastest?

Preparation HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.2.1/lodash.min.js"></script>
<script src="http://epeli.github.io/underscore.string/dist/underscore.string.min.js"></script>

Setup

/**
     * Pad a number with leading zeros to "pad" places:
     *
     * @param number: The number to pad
     * @param pad: The maximum number of leading zeros
     */
    
    function padNumberMath(number, pad) {
      var N = Math.pow(10, pad);
      return number < N ? ("" + (N + number)).slice(1) : "" + number
    }
    
    function padNumberArray(n, len) {
      var n_str = n.toString();
      if (n_str.length >= len) {
        return (n_str);
      }
      return (new Array(len + 1).join('0') + n).slice(-len);
    }
    
    function padNumberLoop(number, length) {
      var my_string = '' + number;
      while (my_string.length < length) {
        my_string = '0' + my_string;
      }
      return my_string;
    }
    // padStr is the zero-pad string, e.g.: "0000"
    
    function padNumberString(number, padStr) {
      var len = padStr.length;
      number = number.toString();
      return number.length >= len ? number : (padStr + number).slice(-len);
    }
    
    function padRec(str, ch, len) {
      return str.length >= len ? str : padRec(ch + str, ch, len);
    }
    
    function padSplitWhileUnshiftJoin(number, len) {
      var result = String(number).split('');
      while (result.length < len) {
        result.unshift(0);
      }
      return result.join('');
    }
    
    _.mixin(_.str.exports());
    
    function padWithUnderscoreString(number, len) {
      return _.pad(number, len, '0');
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Math
padNumberMath(1301, 4);
padNumberMath(120, 4);
padNumberMath(14, 4);
padNumberMath(9, 4);
ready
Array join
padNumberArray(1301, 4);
padNumberArray(120, 4);
padNumberArray(14, 4);
padNumberArray(9, 4);
ready
Loop
padNumberLoop(1301, 4);
padNumberLoop(120, 4);
padNumberLoop(14, 4);
padNumberLoop(9, 4);
ready
String Pad
padNumberString(1301, '0000');
padNumberString(120, '0000');
padNumberString(14, '0000');
padNumberString(9, '0000');
ready
Recursive
padRec('1301', '0', 4);
padRec('120', '0', 4);
padRec('14', '0', 4);
padRec('9', '0', 4);
ready
Split-While-Unshift-Join
padSplitWhileUnshiftJoin(1301, 4);
padSplitWhileUnshiftJoin(120, 4);
padSplitWhileUnshiftJoin(14, 4);
padSplitWhileUnshiftJoin(9, 4);
ready
Pad with Underscore.string
padWithUnderscoreString(1301, 4);
padWithUnderscoreString(120, 4);
padWithUnderscoreString(14, 4);
padWithUnderscoreString(9, 4);
ready

Revisions

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