js 混合排序(同时存在数字、字母、汉字、特殊符号等)

先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
}

测试结果如下:console.log(sortList(mockData))
js 混合排序(同时存在数字、字母、汉字、特殊符号等)_第1张图片

你可能感兴趣的:(工具封装,javascript,react.js,前端,算法,排序算法)