js 分享一个匹配文字排序的算法

需求:根据字段“storageAreaName”的后3位数字排序,如果有文字的话自动排到该条数据后面

数据源

 let arr = [
      
      {
        "storageAreaName": "A010103",
        "storageAreaDesc": "A010103"
      },
      {
        "storageAreaName": "A010103(柱)",
        "storageAreaDesc": "A010103(柱)"
      },
      {
        "storageAreaName": "A010103(柱柱)",
        "storageAreaDesc": "A010103(柱柱)"
      },
      {
        "storageAreaName": "A010101",
        "storageAreaDesc": "A010101"
      },
      {
        "storageAreaName": "A010104",
        "storageAreaDesc": "A010104"
      },
      {
        "storageAreaName": "A010105",
        "storageAreaDesc": "A010105"
      },
      {
        "storageAreaName": "A010105(柱)",
        "storageAreaDesc": "A010105(柱)"
      },
      {
        "storageAreaName": "A010102",
        "storageAreaDesc": "A010102"
      },
      {
        "storageAreaName": "A010106",
        "storageAreaDesc": "A010106"
      },
      {
        "storageAreaName": "A010201",
        "storageAreaDesc": "A010201"
      }
]

排序后的数据

 let arr = [{
        "storageAreaName": "A010101",
        "storageAreaDesc": "A010101"
      },
      {
        "storageAreaName": "A010102",
        "storageAreaDesc": "A010102"
      },
      {
        "storageAreaName": "A010103",
        "storageAreaDesc": "A010103"
      },
      {
        "storageAreaName": "A010103(柱)",
        "storageAreaDesc": "A010103(柱)"
      },
      {
        "storageAreaName": "A010103(柱柱)",
        "storageAreaDesc": "A010103(柱柱)"
      },
      {
        "storageAreaName": "A010104",
        "storageAreaDesc": "A010104"
      },
      {
        "storageAreaName": "A010105",
        "storageAreaDesc": "A010105"
      },
      {
        "storageAreaName": "A010105(柱)",
        "storageAreaDesc": "A010105(柱)"
      },
      {
        "storageAreaName": "A010106",
        "storageAreaDesc": "A010106"
      },
      {
        "storageAreaName": "A010201",
        "storageAreaDesc": "A010201"
      }
    ]

实现代码:

 let arr2 = arr.filter(e=>!e['storageAreaName'].match(/[\u4e00-\u9fa5]+/g))
    let arr5 = arr.filter(e=>e['storageAreaName'].match(/[\u4e00-\u9fa5]+/g))
    arr2 = arr2.sort((a,b)=>Number(a['storageAreaName'].slice(4, 7)) - Number(b['storageAreaName'].slice(4, 7)))
    arr5.forEach(e=>{
      let type = e['storageAreaName'].slice(0, 7)
      let index = arr2.findIndex(a=> a['storageAreaName'] === type)
      arr2.splice(index + 1, 0, e) 
    })

先使用两个数组分别存放 后缀带文字的和不带文字的,使用sort方法将截取出的字段排序,再将存放带文字数组的数据匹配插入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值