比较和排序多种语言的字符串

时间:2016-01-21 09:16:22

标签: javascript sorting

我需要按字母顺序对JS字符串进行排序。在英语中,排序非常简单:

sortArr.sort( function ( a , b ) {
  return a > b ? 1 : -1;
} );

然而,我正在处理的应用程序将被翻译为i.a.阿拉伯语,中文,德语,俄语和其他一些。我可以看到,即使对于非ASCII字符,结果似乎也不对。

我根据文档找到了Intl.Collator().compare

  

Intl.Collat​​or对象是collat​​ors的构造函数,这些对象支持语言敏感的字符串比较。

但是,Safari和大多数移动浏览器都不支持它。

我可以使用其他任何解决方案吗?

修改

String.prototype.localeCompare()但浏览器支持也不够好。

2 个答案:

答案 0 :(得分:2)

截至2020年,大多数现代浏览器现在都支持Intl.Collator。甚至IE11也支持其某些功能(尽管不是全部)。 Intl.Collat​​or几乎可以用您能想到的任何一种语言进行排序(肯定比我能想到的还要多),并且具有用于根据重音符号,大写字母等自定义排序的众多选项。

请参阅以下Mozilla文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator/Collator#Browser_compatibility

这个人给了一个很好的使用方法的教程。 https://dev.to/aumayeung/comparing-non-english-strings-with-javascript-collators-57bf

答案 1 :(得分:1)

简短回答是否。
每种语言都有自己的字母顺序。例如 俄语的字母'с'与土耳其语的顺序不同。 您唯一的选择是尽可能使用Collator(支持它的浏览器)。 Afaik没有任何其他可用于实现此目的的现成库或对象。