Ways to 0-pad a number (v26)

Revision 26 of this benchmark created by TNO on


Description

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

  • this revision adds a recursive version

Setup

/**
     * Pad a number with leading zeros to "pad" places:
     *
     * @param number: The number to pad
     * @param pad: The maximum number of leading zeros
     */
    var obj={};
    
    obj.padNumberMath = function(number, pad) {"use strict";
        var N = Math.pow(10, pad);
        return number < N ? ("" + (N + number)).slice(1) : "" + number;
    };
    
    obj.padNumberArray = function(n, len) {"use strict";
      return (new Array(len + 1).join('0') + n).slice(-len);
    };
    
    obj.padNumberLoop = function(number, length) {"use strict";
        var my_string = '' + number;
        for (var to_add = length - my_string.length; to_add > 0; to_add -= 1){
            my_string = '0' + my_string;
        }
        return my_string;
    };
    
    const sliceZeros = '00000000000000000000000000000000000000000';
    obj.padNumberSlice = function(number,pad) {"use strict";
        var my_string = '' + number;
        return sliceZeros.slice(my_string.length,pad) + my_string;
    };
    
    obj.padNumberLoop2 = function(number, length) {"use strict";
        var my_string = ''+number;
        for (var to_add = length - my_string.length; to_add > 0; --to_add) {
            my_string = '0' + my_string;
        }
        return my_string;
    };
    
    obj.padNumberConcat = function(number, length) {"use strict";
        var my_string = '';
        for (var i=(number+'').length; i<length; ++i) {
            my_string += '0';
        }
        return my_string + number;
    };
    
    obj.padNumberConcat2 = function(number, length) {"use strict";
        number+='';
        var my_string='';
        for (var i=number.length; i<length; ++i) {
            my_string+= '0';
        }
        return my_string + number;
    };
    
    obj.padImpRec = function(num,char,size){"use strict";
        var pad = "", str = "" + num, len = str.length;
        function _padImpRec(){
            return len + pad.length >= size ? pad + str : (pad += char, _padImpRec())
        }
        return _padImpRec()
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Math
obj.padNumberMath(1301, 50);
obj.padNumberMath(120, 50);
obj.padNumberMath(14, 50);
obj.padNumberMath(9, 50);
ready
Array join
obj.padNumberArray(1301, 50);
obj.padNumberArray(120, 50);
obj.padNumberArray(14, 50);
obj.padNumberArray(9, 50);
ready
Loop1
obj.padNumberLoop(1301, 50);
obj.padNumberLoop(120, 50);
obj.padNumberLoop(14, 50);
obj.padNumberLoop(9, 50);
ready
.slice()
obj.padNumberSlice(1301, 50);
obj.padNumberSlice(120, 50);
obj.padNumberSlice(14, 50);
obj.padNumberSlice(9, 50);
ready
Loop2
obj.padNumberLoop2(1301, 50);
obj.padNumberLoop2(120, 50);
obj.padNumberLoop2(14, 50);
obj.padNumberLoop2(9, 50);
ready
Concat1
obj.padNumberConcat(1301, 50);
obj.padNumberConcat(120, 50);
obj.padNumberConcat(14, 50);
obj.padNumberConcat(9, 50);
ready
Concat2
obj.padNumberConcat2(1301, 50);
obj.padNumberConcat2(120, 50);
obj.padNumberConcat2(14, 50);
obj.padNumberConcat2(9, 50);
ready
Imperative+Recursive
obj.padImpRec(1301, '0', 50);
obj.padImpRec(120, '0', 50);
obj.padImpRec(14, '0', 50);
obj.padImpRec(9, '0', 50);
ready

Revisions

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