Blame view

node_modules/underscore.string/naturalCmp.js 701 Bytes
f7563de62   Palak Handa   first commit
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;
  };