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)
);
}