I have a mixed array that I need to sort by alphabet and then by digit
[A1, A10, A11, A12, A2, A3, A4, B10, B2, F1, F12, F3]
How do I sort it to be:
[A1, A2, A3, A4, A10, A11, A12, B2, B10, F1, F3, F12]
I have tried
arr.sort(function(a,b) {return a - b});
but that only sorts it alphabetically. Can this be done with either straight JavaScript or jQuery?
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;
}
}
console.log(
["A1", "A10", "A11", "A12", "A2", "A3", "A4", "B10", "B2", "F1", "F12", "F3"].sort(sortAlphaNum)
)