原数据是这样的:
var list = ['abc123', 'abc11', 'abc2']
希望得到的排序结果是 abc2,abc11,abc123 就是先按照字符串排字符或文字,然后按照数字排
解决方案:
var list = ['abc123', 'abc11', 'abc2']
var list2 = []
list2 = list.sort(function(a, b) {
return a.localeCompare(b, 'zh-CN', { numeric: true })
})
console.log(list2)
如果需要先排序数字,再排序字符串
var list = ['abc123', 'abc11', 'abc2','c1','b1']
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)