js字符串与数字混合的字符串排序要求先字符后数字

1,037 阅读1分钟

原数据:

var list = ['GEPM01','GEWG01','GEPM02',]

希望得到的排序结果是 GEPM01,GEPM02,GEWG01 就是先按照字符串排字符或文字,然后按照数字排

解决方案:

var list = ['GEPM01','GEWG01','GEPM02',]
var list2 = []
list2 = list.sort(function(a, b) {
  return a.localeCompare(b, 'zh-CN', { numeric: true })
})
console.log(list2)

localeCompare的具体用法以及参数

如果需要先排序数字,再排序字符串

var list = ['GEPM01','GEWG01','GEPM02','GEPM05','GEPM03']
        var list2 = []
        list2 = list.sort(function(a, b) {
          var an = a.match(/\d+(.\d+)?/g)[0];
          var bn = b.match(/\d+(.\d+)?/g)[0];
          if(parseFloat(an) > parseFloat(bn)) {
            return 1
          } else if(parseFloat(an) < parseFloat(bn)){
            return -1
          } else {
            return a.localeCompare(b)
          }
        })
        console.log(list2)