js localeCompare前端排序

244 阅读1分钟

一、问题描述

1. 框架:vue3+element Plus

2. element table表格默认排序是按照Unicode字符编码排序,需求是像中文名字按照字母进行排序,因为没有接口数据量比较所以使用了前端排序,发现了localeCompare这个方法,所以来学习一下

3. 如下图所示,这是我对element plus二次封装的table表格代码:

image.png

image.png

二、localeCompare的使用及属性

1. localeCompare方法详细介绍(可能会被墙哦!!)

2. 使用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 上对大小写字母的排序规则不一致
而且在中文环境下,默认的排序规则是:数字 > 中文 > 字母 ,产品需要改为:数字 > 字母 > 中文

3. 通过使用 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", "吃饭", "我", "玩手机"]