需求:根据字段“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方法将截取出的字段排序,再将存放带文字数组的数据匹配插入