Javascript 中文按拼音顺序

Javascript 有一个允许对数组进行排序的本机方法sort 。执行简单array.sort()操作会将每个数组条目视为字符串并按字母顺序对其进行排序。您也可以提供自己的自定义排序功能。

['Shanghai', 'New York', 'Mumbai', 'Buenos Aires'].sort();
// ["Buenos Aires", "Mumbai", "New York", "Shanghai"]

但是当你尝试像这样对一个非 ASCII 字符数组进行排序时['é', 'a', 'ú', 'c'],你会得到一个奇怪的结果['c', 'e', 'á', 'ú']。发生这种情况是因为 sort 仅适用于英语。

请参见下一个示例:

// Spanish
['único','árbol', 'cosas', 'fútbol'].sort();
// ["cosas", "fútbol", "árbol", "único"] // bad order

// German
['Woche', 'wöchentlich', 'wäre', 'Wann'].sort();
// ["Wann", "Woche", "wäre", "wöchentlich"] // bad order

//中文
['张','王','李'].sort();
//['张', '李', '王'] //按拼音顺序应为李、王、张

幸运的是, ECMAScript 国际化 API 提供了两种方法来克服这种行为localeCompareIntl.Collat​​or 。

这两种方法都有自己的自定义参数,以便将其配置为充分工作。

使用localeCompare()

['único','árbol', 'cosas', 'fútbol'].sort(function (a, b) {
  return a.localeCompare(b);
});
// ["árbol", "cosas", "fútbol", "único"]

['Woche', 'wöchentlich', 'wäre', 'Wann'].sort(function (a, b) {
  return a.localeCompare(b);
});
// ["Wann", "wäre", "Woche", "wöchentlich"]

['张','王','李'].sort(function (a, b) {
  return a.localeCompare(b);});
// ['李', '王', '张']

使用Intl.Collator()

['único','árbol', 'cosas', 'fútbol'].sort(Intl.Collator().compare);
// ["árbol", "cosas", "fútbol", "único"]

['Woche', 'wöchentlich', 'wäre', 'Wann'].sort(Intl.Collator().compare);
// ["Wann", "wäre", "Woche", "wöchentlich"]

['张','王','李'].sort(Intl.Collator().compare);
//  ['李', '王', '张']
  • 对于每种方法,您都可以自定义位置。
  • 根据Firefox Intl.Collat​​or 在比较大量字符串时更快。

因此,当您使用非英语语言的字符串数组时,请记住使用此方法以避免意外排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值