toDigitsArray - Get array of digits from integer and string
JavaScript performance comparison
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.
| Test | Ops/sec | |
|---|---|---|
integer |
|
pending… |
integer reverse |
|
pending… |
string |
|
pending… |
string reverse |
|
pending… |
You can edit these tests or add even more tests to this page by appending /edit to the URL.
0 comments