数组排序:数值相同根据固定名称、字母或地名进行排序

在日常开发的过程中我们会遇到让数组按照一定顺序进行排序,排序条件唯一时处理较为简单,当数值相同需要根据名称、字母、地名等固定顺序来单独排序处理就比较麻烦,这是我在开发过程中用的一种方法。代码如下

//封装排名接口   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
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值