在日常开发的过程中我们会遇到让数组按照一定顺序进行排序,排序条件唯一时处理较为简单,当数值相同需要根据名称、字母、地名等固定顺序来单独排序处理就比较麻烦,这是我在开发过程中用的一种方法。代码如下
//封装排名接口 rankNameList 放置固定的名称排名 [Apple,Banana,Cherry,Strawberry] 这里按照字母排序
const getSortList = (res,rankNameList) => {
let newRes = JSON.stringify(res)
let newList = [] //重新排序后数组
if(!(newRes === '[]'||newRes === 'null'||newRes === undefined)){ //接口返回的res值判断
//放入名称排名项 sortIndex名称排名索引标记
newList = res.map(item=>{
return {...item,'sortIndex':rankNameList.indexOf(item.name)}
})
//完成率、名称排名排序 属性percent为数值比较 、根据实际情况替换属性名称
newList.sort(function (a,b){
if(a.percent === b.percent){
return a.sortIndex - b.sortIndex
}
return b.percent - a.percent
})
let indexRank = 0
let flag = false //判断名次是否加1
//处理同名次
newList.forEach((item,index)=>{
flag = false
if(index === 0||item.percent !== newList[index-1].percent){
indexRank = indexRank +1
flag = true
}
item.rank = flag?index+1:indexRank
if(flag){
indexRank = index+1
}
})
}else{
newList = res
}
return newList
}