行政路线编码 字母+数字的排序方式

第一种:

// 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);
     }
 })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值