本文概述
- 使用localeCompare的解决方案
- 使用Intl.Collat??or的解决方案
- 塞迪尔(塞迪利亚)?…
- 口音aigu(急性口音)é…
- 重音符号circonflexe(circumflex)a, ê, ?, ?, ?…
- 重音(grave accent)à, è, ù…
- 重音符号(dieresis / umlaut)?, ?, ü
['Bogotá', 'Bucaramanga', 'Cali', 'Santa Marta', 'Cartagena'].sort();
// This will sort as//["Bogotá", "Bucaramanga", "Cali", "Cartagena", "Santa Marta"]
JavaScript的sort函数会自动为你解决问题。可悲的是, 当你将提到的字符作为第一个字符排序时, 例如德语单词, 你会得到奇怪的结果:
['B?ren', 'küssen', 'K?fer', '?hnlich', '?pfel'].sort();
// This will sort as// ["B?ren", "K?fer", "küssen", "?hnlich", "?pfel"]
可怜的德国人……这不是每个人都期望的” 字母顺序” 命令, 而是我们希望得到的结果[“ ?hnlich” , “ ?pfel” , “ B?ren” , “ K?fer” , “ küssen” ]。但是, 此问题的解决方案非常简单, 它也依赖于JavaScript的本机排序函数, 但相反, 我们将修改作为第一个参数接收的compareFunction。 sort函数的第一个参数指定一个定义排序顺序的函数。如果省略, 则将数组元素转换为字符串, 然后根据每个字符的Unicode代码点值进行排序。
使用localeCompare的解决方案正确地对字符串数组进行排序的第一个选项是提供字符串的localeCompare方法作为比较器, 该方法返回一个数字, 该数字指示参考字符串是按排序顺序位于给定字符串之前还是之后还是与给定字符串相同。例如:
['B?ren', 'küssen', 'K?fer', '?hnlich', '?pfel'].sort(function (a, b) {return a.localeCompare(b);
});
// This sorts as:// ["?hnlich", "?pfel", "B?ren", "K?fer", "küssen"]
使用Intl.Collat??or的解决方案使用特殊字符对字符串数组进行排序的第二种方法是使用Intl.Collat??or对象作为比较器。该对象是整理程序的构造函数, 该整理程序使语言敏感的字符串比较成为可能。例如:
['B?ren', 'küssen', 'K?fer', '?hnlich', '?pfel '].sort(Intl.Collator().compare);
// This will sort as:// ["?hnlich", "?pfel ", "B?ren", "K?fer", "küssen"]
根据一些测试, 比较大量字符串时, Intl.Collat??or实现最终比localeCompare快得多。
【如何使用JavaScript正确地按字母顺序对带有特殊字符的字符串数组进行排序】编码愉快!
推荐阅读
- 有没有办法使用Android Studio部署Libgdx桌面应用程序(基于IntelliJ Idea的IDE)
- 如何在ACE Editor装订线上添加(切换)断点
- 如何使用JavaScript检查字符串是否是回文
- 如何在Ubuntu 16.04中使用命令行CLI安装ClamAV并扫描病毒
- 如何在JavaScript中对字符串进行驼峰化和脱峰处理
- JavaScript异常在Google Chrome中的含义为”不允许将顶部框架导航到数据URL(”)
- 如何安装和使用Exa,这是Ubuntu 16.04中ls命令的现代替代品
- 如何在dhtmlxScheduler中更改事件的默认长度(持续时间)
- 如何使用纯JavaScript或jQuery在客户端对表进行排序