以前做了一个需求,要求按照人名的拼音进行排序,然后通过oracle的NLS_SORT
参数在后台进行了排序,然后将结果返回给前端。现在想看看如果前端对字符串按照汉语拼音进行排序该怎么做呢?遂查找资料,将方法记录如下。
[‘张三‘,‘李四‘,‘王五‘].sort((a, b) => a.localeCompare(b, ‘zh-Hans-CN‘, {sensitivity: ‘accent‘}))
localeCompare
函数的语法如下:
referenceStr.localeCompare(compareString[, locales[, options]])
参数
compareString用来比较的字符串
locales可选。 用来表示一种或多种语言或区域的一个符合 BCP 47 标准的字符串或一个字符串数组。
zh-Hans-CN (Chinese written using the Simplified script as used in mainland China)
返回一个数字表示是否 引用字符串 在排序中位于 比较字符串 的前面,后面,或者二者相同。
- 当 引用字符串 在 比较字符串 前面时返回 -1
- 当 引用字符串 在 比较字符串 后面时返回 1
- 相同时返回 0
切勿依赖于 -1 或 1 这样特定的返回值。不同浏览器之间(以及不同浏览器版本之间)返回的正负数的值各有不同,因为W3C规范中只要求返回值是正值和负值,而没有规定具体的值。一些浏览器可能返回-2或2或其他一些负的、正的值。
参考
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
https://segmentfault.com/q/1010000002546028