toDigitsArray - Get array of digits from integer and string

JavaScript performance comparison

Test case created by XP1

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    function test(callback)
    {
        //var values = [4, 2, "x", " ", ".", "3434.234343", 2312.11, "23.1", null, void 0, "-112918293", -2, 0, "~!@#$%^&*()-=[];'./", "QWERTYUIOPASDFGHJKL:ZXCVBNM<>", 42, 3.14159, "-----2", "", "0.0.0.0.0.0", "localhost", "192.168.1.1", "127.0.0.1", "1234567890"];
        //var values = [4, 2, 3434.234343, 2312.11, 23.1, -112918293, -2, 0, 42, 3.14159, 1234567890];
        var values = [4];
   
        var i = null;
        var length = values.length;
        for (i = 0; i < length; i += 1)
        {
            callback(values[i]);
        }
    }
   
    function reverse(array)
    {
        var left = null;
        var right = null;
        var length = array.length;
        for (left = 0, right = length - 1; left < right; left += 1, right -= 1)
        {
            var temporary = array[left];
            array[left] = array[right];
            array[right] = temporary;
        }
        return array;
    }
   
    function toDigitsArrayFromInteger(integer, isReverse)
    {
        var digits = [];
   
        if (integer > 0)
        {
            var floor = window.Math.floor;
            while (integer > 0)
            {
                digits.push(floor(integer % 10));
                integer = floor(integer / 10);
            }
   
            // Array is populated in reverse order. Un-reverse it to make it normal.
            if (!isReverse)
            {
                digits = reverse(digits);
            }
        }
        else if (integer < 0)
        {
            digits = toDigitsArrayFromInteger(-integer, isReverse);
        }
        else if (integer === 0)
        {
            digits.push(0);
        }
   
        return digits;
    }
   
    function toDigitsArrayFromString(string, isReverse)
    {
        var digits = [];
   
        string += ""; // Coerce to string.
   
        var i = null;
        var length = string.length;
        for (i = 0; i < length; i += 1)
        {
            var integer = parseInt(string.charAt(i), 10);
            if (isFinite(integer))
            {
                digits.push(integer);
            }
        }
   
        if (isReverse)
        {
            digits = reverse(digits);
        }
   
        return digits;
    }
   
    function testIntegerReverse(value)
    {
        return toDigitsArrayFromInteger(value, true);
    }
   
    function testStringReverse(value)
    {
        return toDigitsArrayFromString(value, true);
    }
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
integer
test(toDigitsArrayFromInteger);
pending…
integer reverse
test(testIntegerReverse);
pending…
string
test(toDigitsArrayFromString);
pending…
string reverse
test(testStringReverse);
pending…

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

Compare results of other browsers

0 comments

Add a comment