js使用localeCompare中文排序

localeCompare:

localeCompare方法详细介绍:

JavaScript localeCompare() 方法

问题描述:

使用localeCompare对一个字符串数组按名称排序

const arr = ['我','B','c','C','b','玩手机','233','1024','211','吃饭'];
 
arr.sort((a,b)=>a.localeCompare(b));
//["1024", "211", "233", "吃饭", "玩手机", "我", "b", "B", "c", "C"]

但在Mac 和 Windows 上对大小写字母的排序规则不一致
而且在中文环境下,默认的排序规则是:数字 > 中文 > 字母 ,产品需要改为:数字 > 字母 > 中文

解决方案:

一般情况下,传入locales就可以了

数字 > 中文  > 小写字母  > 大写字母

arr.sort((a,b)=>a.localeCompare(b,'zh-CN-u-kf-lower'));
//["1024", "211", "233", "吃饭", "玩手机", "我", "b", "B", "c", "C"]

数字 > 中文  > 大写字母  > 小写字母

arr.sort((a,b)=>a.localeCompare(b,'zh-CN-u-kf-upper'));
//["1024", "211", "233", "吃饭", "玩手机", "我", "B", "b", "C", "c"]

数字  > 小写字母  > 大写字母 > 中文

arr.sort((a,b)=>a.localeCompare(b,'en-US-u-kf-lower'));
//["1024", "211", "233", "b", "B", "c", "C", "吃饭", "我", "玩手机"]

数字  > 大写字母  > 小写字母 > 中文 

arr.sort((a,b)=>a.localeCompare(b,'en-US-u-kf-upper'));
//["1024", "211", "233", "B", "b", "C", "c", "吃饭", "我", "玩手机"]
const columns = [{
        title: '汉字',
        dataIndex: 'name',
        sorter: (a, b) => a.name.localeCompare(b.name)
    },
    {
        title: '数字',
        dataIndex: 'amount',
        sorter: (a, b) => a.amount - b.amount,
    },
    {
        title: '字符串',
        dataIndex: 'value',
        sorter: (a, b) => a.value.localeCompare(b.value)
    }
];

 

posted @ 2022-06-15 16:31  图图小淘气_real  阅读(1392)  评论(0编辑  收藏  举报