对带逗号的数字字符串按大小进行排序

    <script>
      /* 
    需求:对下列数组按大小进行排序
    思路:g
        1、将原数组各个元素的信息(item和index)以数组对象的形式保存
        2、先将各元素的逗号去除
        3、对去除逗号后的数字按大小进行排序
        4、再通过各元素在初始数组中的下标,对初始数组进行排序
*/
let arr = ['02,344,2', '1238', '1,5,4,9', '5844', '008,4,77', '2,3,4']

// 创建一个新数组,用于存放元素的数据和下标
let arrObj = []

// 1、将原数组各个元素的信息(item和index)以数组对象的形式保存
arr.forEach((item, index) => {
  arrObj.push({ item, index })
})

// 声明一个方法,用于排序,详细参见js的sort方法
function compare(property) {
  return function (a, b) {
    var value1 = a[property]
    var value2 = b[property]
    return value1 - value2 //目前是从小到大排序,如果return value2 - value1 则是从大到小排序
  }
}

// 2、将各元素的逗号去除,并且按从小到大进行排序
let newArrObj = arrObj
  .map((v) => { //遍历数组对象
    return {
      item: v.item.replace(/,/g, '').replace(/\b(0+)/gi, ''), //正则去除逗号
      index: v.index //同时保存元素在初始数组中对应的下标
    }
  })
  .sort(compare('item')) //3、对去除逗号后的数字按大小进行排序

  //4、再通过各元素在初始数组中的下标,对初始数组进行排序
arrObj.sort((a, b) => {
  let order = newArrObj.map((v) => v.index)
  return order.indexOf(a.index) - order.indexOf(b.index)
})

arr = arrObj.map((v) => v.item)

console.log('arr', arr) // ['2,3,4', '1238', '1,5,4,9', '5844', '008,4,77', '02,344,2']

    </script>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值