第一种:
// lxbm: G1,G4,SL3596,H89...
const array = []
array.map(item => {
const tmpArr = item.lxbm.split('')
const reg = /[a-z,A-Z]/g
item.sortLetter = '' // 字母转数字后的结果
item.sortNum = '' // 纯数字的结果
tmpArr.map(it => {
if (reg.test(it)) {
item.sortLetter += it.charCodeAt(0).toString() // 字母转换成数字
} else {
item.sortNum += it.toString()
}
})
return item
})
// sort排序
array.sort((a, b) => {
return this.sortLxbm(a, b)
})
// 排序规则
sortLxbm(a, b) {
// 字母一样时,按路线数字编号排序
if (Number(a.sortLetter) === Number(b.sortLetter)) {
return Number(a.sortNum) - Number(b.sortNum)
}
// 按字母排序
return Number(a.sortLetter) - Number(b.sortLetter)
}
第二种:
// lxbm: G1,G4,SL3596,H89...
// lxmc:京哈,京广,京藏...
const array = []
const nameArr = []
array.map(item => {
item.lxmcn = item.lxbm + '-' + item.lxmc
nameArr.push(item.lxmcn)
return item
})
nameArr.sort() // 用拼接好的名称直接sort排序,sort会自动处理字母和数字的顺序(或许最终结果不是你想要的,这时就需要自己定制化调整逻辑了...)
// 然后结果数组按特定的名称数组进行排序,参考如下:
/**
* 数组按特定顺序排序
* 比如:已有数组按以下顺序排列:风雪、雨露、雷霆、暴雨、风沙、飞雾
* 核心就是利用自由的sort方法
* @param now 当前需要排序的数组
* @param mirror 指定的排序规则
*/
let now = ['雨露','白霜','飞雾','暴雨','风雪','雷霆','风沙'];
let mirror = ['风雪','雨露','雷霆','暴雨','风沙','飞雾'];
let val = now.sort(function(a, b) {
// 对应不上的排到后面
if (mirror.indexOf(a) == -1 || mirror.indexOf(b) == -1) {
return mirror.indexOf(b) - mirror.indexOf(a);
} else {
return mirror.indexOf(a) - mirror.indexOf(b);
}
})