You should be able to take what you need from this function-
it is meant to sort an array of strings that
may contain digits,
and it collapses the 'number' parts to single values, rather than separate characters.
- function naturalSort(a, b){
-
var cnt = 0, tem;
-
var a = a.toLowerCase();
-
var b = b.toLowerCase();
-
if (a == b) return 0;
-
-
var rx = /^(\.)?\d/;
-
var L = Math.min(a.length, b.length) + 1;
-
while (cnt < L && a.charAt(cnt) === b.charAt(cnt) &&
-
rx.test(b.substring(cnt)) == false) cnt++;
-
-
a = a.substring(cnt);
-
b = b.substring(cnt);
-
-
if (rx.test(a) || rx.test(b)){
-
if (rx.test(a) == false) return a ? 1 : -1;
-
else if (rx.test(b) == false) return b ? -1 : 1;
-
else{
-
var tem = parseFloat(a) - parseFloat(b);
-
if (tem != 0) return tem;
-
else tem = a.search(/[^\.\d]/);
-
if (tem == -1) tem = b.search(/[^\.\d]/);
-
a = a.substring(tem);
-
b = b.substring(tem);
-
}
-
}
-
if (a == b) return 0;
-
return a > b ? 1 : -1;
-
}
/*
test case:
var A='100.00,a101,b10,a10,b2,b,2,a5,a2'.split(',');
A.sort() returns [100.00,2,a10,a101,a2,a5,b,b10,b2]
A.sort(naturalSort) returns [2,100,100.00,a2,a5,a10,a101,b,b2,b10]
*/