Here is my JavaScript code to sort data in an alphanumeric way:
var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a,b) {
var aA = a.replace(reA, "");
var bA = b.replace(reA, "");
if(aA === bA) {
var aN = parseInt(a.replace(reN, ""), 10);
var bN = parseInt(b.replace(reN, ""), 10);
return aN === bN ? 0 : aN > bN ? 1 : -1;
} else {
return aA > bA ? 1 : -1;
}
}
my input data:
["ap1", "ap4", "ap12","4ggh2","7ggh9","9tggfg2","4gghdd2","4gghfg2"]
after sorting it should be like :
4ggh2,4hghdd2,4kghfg2,7ggh9,9tggfg2,ap1,ap4,ap12
which is not happening could you please help me out in this.
function sortAlphaNum(a, b) {
var x = a.split("/");
var y = b.split("/");
x = x[x.length-1].replace(/\\\s/g," ").split(/(\d )/);
y = y[y.length-1].replace(/\\\s/g," ").split(/(\d )/);
for (var i in x) {
if (x[i] && !y[i] || isFinite(x[i]) && !isFinite(y[i])) {
return -1;
} else if (!x[i] && y[i] || !isFinite(y[i]) && isFinite(y[i])) {
return 1;
} else if (!isFinite(x[i]) && !isFinite(y[i])) {
x[i] = x[i].toLowerCase();
y[i] = y[i].toLowerCase();
if (x[i] < y[i]) return -1;
if (x[i] > y[i]) return 1;
} else {
x[i] = parseFloat(x[i]);
y[i] = parseFloat(y[i]);
if (x[i] < y[i]) return -1;
if (x[i] > y[i]) return 1;
}
}
return 0;
}
alert(["ap1", "ap4", "ap12","4ggh2","7ggh9","9tggfg2","4hghdd2","4kghfg2"].sort(sortAlphaNum));