Blame view
node_modules/underscore.string/naturalCmp.js
701 Bytes
f7563de62
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
module.exports = function naturalCmp(str1, str2) { if (str1 == str2) return 0; if (!str1) return -1; if (!str2) return 1; var cmpRegex = /(\.\d+|\d+|\D+)/g, tokens1 = String(str1).match(cmpRegex), tokens2 = String(str2).match(cmpRegex), count = Math.min(tokens1.length, tokens2.length); for (var i = 0; i < count; i++) { var a = tokens1[i], b = tokens2[i]; if (a !== b) { var num1 = +a; var num2 = +b; if (num1 === num1 && num2 === num2) { return num1 > num2 ? 1 : -1; } return a < b ? -1 : 1; } } if (tokens1.length != tokens2.length) return tokens1.length - tokens2.length; return str1 < str2 ? -1 : 1; }; |