javascript-string-pad-perf

by shyamh

HTML

Open a javascript console to see the run output</p>

<input type=button id="goBtn" value="Run Performance" />
<input type=button id="testBtn" value="Test Correctness" />

JavaScript

var t = new Date(),
    i = 0,
    N = 1000000,
    str = '123',
    pad = '0',
    prePadded = '000000000000000000000000000000', // 30 long pre-padded string
    length = 30;
    // prePadded = '00000', // 5 long pre-padded string
    // length = 5;

function padString1(len, pad, str, leftPadded) {
    if (str == undefined) return Array(len - 1).join(pad);
    if (leftPadded) {
        return Array(len + 1 - str.length).join(pad) + str;
    } else {
        return str + Array(len + 1 - str.toString().length).join(pad);
    }
}

function padString2(len, pad, str, leftPadded) {
    if (str == undefined) str = ''
    if (leftPadded) {
        while (str.length < length) str = pad + str;
    } else {
        while (str.length < length) str = str + pad;
    }
    return str;
}

function padString3(pad, str, leftPadded) {
    if (str == undefined) return pad;
    if (leftPadded) {
        return (pad + str).slice(-pad.length);
    } else {
        return (str + pad).substring(0, pad.length);
    }
}

$('#goBtn').click(function () {
    console.log("-- starting ...");
    
    t = new Date();
    for (i = 0; i < N; i++) {
        padString1(length, pad, str, false);
        padString1(length, pad, undefined, false);
        padString1(length, pad, str, true);
    }

    console.log("padString1: " + ((new Date() - t) / 1000) + " ms");

    t = new Date();
    for (i = 0; i < N; i++) {
        padString2(length, pad, str, false);
        padString2(length, pad, undefined, false);
        padString2(length, pad, str, true);
    }

    console.log("padString2: " + ((new Date() - t) / 1000) + " ms");

    t = new Date();
    for (i = 0; i < N; i++) {
        padString3(prePadded, str, false);
        padString3(prePadded, undefined, false);
        padString3(prePadded, str, true);
    }

    console.log("padString3: " + ((new Date() - t) / 1000) + " ms");
    
});

$('#testBtn').click(function () {
    console.log("-- testing correctness ...");
    
   ...