1234567891011121314151617181920212223242526272829303132 |
- // adapted from http://nedbatchelder.com/blog/200712.html#e20071211T054956
-
- var NUMBER_PATTERN = /([0-9]+)/;
-
- function naturalCompare(value1, value2) {
- var keys1 = ('' + value1).split(NUMBER_PATTERN).map(tryParseInt);
- var keys2 = ('' + value2).split(NUMBER_PATTERN).map(tryParseInt);
- var key1;
- var key2;
- var compareFirst = Math.min(keys1.length, keys2.length);
- var i, l;
-
- for (i = 0, l = compareFirst; i < l; i++) {
- key1 = keys1[i];
- key2 = keys2[i];
-
- if (key1 != key2) {
- return key1 > key2 ? 1 : -1;
- }
- }
-
- return keys1.length > keys2.length ? 1 : (keys1.length == keys2.length ? 0 : -1);
- }
-
- function tryParseInt(value) {
- return ('' + parseInt(value)) == value ?
- parseInt(value) :
- value;
- }
-
- module.exports = naturalCompare;
|