how to sort mixed numeric/alphanumeric array in javascript

前端 未结 4 1422
栀梦
栀梦 2021-02-09 03:25

I have a mixed array that I need to sort by number, alphabet and then by digit-

[\'A1\', \'A10\', \'A11\', \'A12\', \'A3A\', \'A3B\', \'A3\', \'A4\', \'B10\', \'         


        
4条回答
  •  情歌与酒
    2021-02-09 04:03

    var arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3'];
    
    // regular expression to get the alphabetic and the number parts, if any
    var regex = /^([a-z]*)(\d*)/i;
    
    function sortFn(a, b) {
      var _a = a.match(regex);
      var _b = b.match(regex);
    
      // if the alphabetic part of a is less than that of b => -1
      if (_a[1] < _b[1]) return -1;
      // if the alphabetic part of a is greater than that of b => 1
      if (_a[1] > _b[1]) return 1;
    
      // if the alphabetic parts are equal, check the number parts
      var _n = parseInt(_a[2]) - parseInt(_b[2]);
      if(_n == 0) // if the number parts are equal start a recursive test on the rest
          return sortFn(a.substr(_a[0].length), b.substr(_b[0].length));
      // else, just sort using the numbers parts
      return _n;
    }
    
    console.log(arr.sort(sortFn));

    Note: the i modifier in the regular expression (/.../i) means case-insensitive (looks for both lowercases and uppercases).

提交回复
热议问题