先mock一些数据,包含中文、英文(大小写)、数字、特殊符号 的数据,
按照title的首个字符进行排序,中文按照拼音的首字母
const mockData = [
{title:'乐游', id: 1},
{title:'1测试', id: 2},
{title:'3401fudao', id: 3},
{title:'233乐园', id: 4},
{title:'6rooms', id: 5},
{title:'youdaotranslator', id: 6},
{title:'37s', id: 7},
{title:'中汇掌富通', id: 8},
{title:'a乐游', id: 9},
{title:'kunluns', id: 10},
{title:'jurens', id: 11},
{title:'B乐游', id: 12},
{title:'Grindr', id: 13},
{title:'macauzone', id: 14},
{title:'m乐游', id: 15},
{title:'popdaily', id: 16},
{title:'Azar', id: 17},
{title:'Vypr', id: 18},
{title:'#&*', id: 19},
{title:'(786!', id: 20},
{title:'&……(', id: 21},
{title:'¥%&', id: 22},
{title:'掌上考研', id: 23},
{title:'京东快递', id: 24},
{title:'Baray巴乐外卖', id: 25},
{title:'派件助手', id: 26},
{title:'タップル誕生-マッチングアプリ・恋活サービス(tapple)', id: 27},
{title:'ポケコロ', id: 28},
{title:'ディズニー マイリトルドール', id: 29},
{title:'심쿵 - 동네 친구 사귀고 싶을 때', id: 30},
{title:' ', id: 31},
]
1.通过将上述数据分为4类
2.对每类数据进行排序
3.按照要求的先后顺序将4类数据组合
代码如下:
const sortList = (initList) => {
// 名字以特殊符号开头的应用列表
const symbol_list = []
// 名字以中文开头的应用列表
const cn_list = []
// 名字以英文开头的应用列表
const en_list = []
// 名字以数字开头的应用列表
const num_list = []
initList.map((item) => ({
title: item.title?.trim() || '未知',//去除首尾空格,没有title填充未知,(数据清洗)
key: item.id
})).forEach((item) => {
const { title } = item
//通过正则进行数据分类
if (/[\u4e00-\u9fa5]/.test(title[0])) {
cn_list.push(item)
} else if (/[a-zA-Z]/.test(title[0])) {
en_list.push(item)
} else if (/[\d]/.test(title[0])) {
num_list.push(item)
} else {
symbol_list.push(item)
}
})
//按照要求的方式进行数据排序重组
const newList = [
...cn_list.sort((a, b) => a.title[0]?.localeCompare(b.title[0])),
...en_list.sort((a, b) => a.title[0].localeCompare(b.title[0])),//localeCompare可以不区分大小写的进行排序
...num_list.sort((a, b) => a.title[0] - b.title[0]),
...symbol_list.sort((a, b) => a.title[0] - b.title[0])
]
return newList
}