String/Numeric Comparison

HTML

<div class="output1">Numeric array: </div>
<div class="output2">After sort: </div>
<div class="output3">String array: </div>
<div class="output4">After sort: </div>

JavaScript

// Sorting order
var order = "asc"; // Try switching between "asc" and "dsc"

// Dummy arrays
var numericArr = [10,20,null,1,-2,-3,null,5];
var stringArr = [10,"20",null,"1","bar","-2",-3,null,5,"foo"];

// Sort arrays
$(".output1").append(numericArr.toString());
$(".output3").append(stringArr.toString());

order = order == "dsc" ? -1 : 1;
numericArr.sort(sortData);
stringArr.sort(sortData);

$(".output2").append(numericArr.toString());
$(".output4").append(stringArr.toString());

function typeOrder(x) {
    if (x == null)
        return 2;
    if (isNaN(+x))
        return 1;
    return 0;
}
function sortNumber(a, b) {
    a = parseInt(a, 10); b = parseInt(b, 10);
    if (isNaN(a) || isNaN(b))
        return 0;
    return a - b;
}
function sortString(a, b) {
    if (typeof a != "string" || typeof b != "string")
       return 0;
    return +(a > b) || -(b > a);
}
function sortData(a, b) {
    return order * ( typeOrder(a)-typeOrder(b)
                     || sortNumber(a, b)
                     || sortString(a, b)
                   );
}