項(xiàng)目中有時(shí)需要對(duì)數(shù)組對(duì)象中的某個(gè)屬性進(jìn)行排序缴阎,屬性值按照一定的規(guī)則進(jìn)行排序,下面以數(shù)字-中文首字母-英文大寫-英文小寫的順序進(jìn)行排序進(jìn)行舉例滞时。
數(shù)據(jù):
var info = [
{id:1,name:'101路',price:'2'},
{id:2,name:'02路',price:'2'},
{id:3,name:'r11',price:'2'},
{id:4,name:'6路',price:'2'},
{id:5,name:'23路',price:'2'},
{id:6,name:'01路',price:'2'},
{id:7,name:'g2020',price:'2'},
{id:8,name:'R2018',price:'2'},
{id:9,name:'G101',price:'2'},
{id:10,name:'線路',price:'2'},
{id:11,name:'路線',price:'2'}
]
排序:
var rankArr = []
// 數(shù)字0開頭
var zeroArr = info .filter((ele, index) => {
if (Number(ele.name.substr(0, 1)) === 0) {
return !isNaN(Number(ele.name.substr(0, 1)))
}
})
// 數(shù)字0開頭排序
zeroArr = zeroArr.sort((a, b) => {
// return parseInt(a.name) - parseInt(b.name)
return a.name.replace(/[^0-9]/ig, '') - b.name.replace(/[^0-9]/ig, '')
})
rankArr = zeroArr
// 數(shù)字非0開頭
var numArr = info .filter((ele, index) => {
if (Number(ele.name.substr(0, 1)) !== 0) {
return !isNaN(Number(ele.name.substr(0, 1)))
}
})
// 數(shù)字非0開頭排序
numArr = numArr.sort((a, b) => {
return a.name.replace(/[^0-9]/ig, '') - b.name.replace(/[^0-9]/ig, '')
})
// 漢字開頭
var reg = new RegExp('^[\u4e00-\u9fa5]')
var wordArr = info .filter((ele, index) => {
return reg.test(ele.name.substr(0, 1))
})
// 漢字開頭排序
wordArr = wordArr.sort((a, b) => {
return a.name.localeCompare(b.name)
})
// 大寫字母開頭
var regUpper = /^[A-Z]+$/
var upperArr = info .filter((ele, index) => {
return regUpper.test(ele.name.substr(0, 1))
})
// 大寫字母開頭排序
upperArr = upperArr.sort((a, b) => {
return a.name.localeCompare(b.name)
})
// 剩余其他的開頭
var otherArr = info .filter((ele, index) => {
return isNaN(Number(ele.name.substr(0, 1))) && !reg.test(ele.name.substr(0, 1)) && !regUpper.test(ele.name.substr(0, 1))
})
// 剩余其他的開頭排序
otherArr = otherArr.sort((a, b) => {
return a.name.localeCompare(b.name)
})
info = rankArr
info = this.info.concat(numArr, wordArr, upperArr, otherArr)
排序結(jié)果:
image.png
可以將該排序規(guī)則封裝狗热,形參為數(shù)組和數(shù)組對(duì)象中的某個(gè)屬性,使用時(shí)只要把這兩個(gè)參數(shù)傳進(jìn)方法阐滩,然后return出排序結(jié)果二打。
另外,如果需要對(duì)字符串中的數(shù)字字母或漢字進(jìn)行更細(xì)致的排序掂榔,那么可以在排序之后進(jìn)行多次再排序得到想要的排序效果继效,方法還是前面那些基礎(chǔ)的方法症杏,根據(jù)需求進(jìn)行自由組合得出一套排序規(guī)則。