2016-01-21 75 views
1

我需要按字母顺序排序JS字符串。在英文排序是很容易的:比较和排序多种语言的字符串

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

但是我正在工作的应用程序将被翻译成i.a.阿拉伯文,中文,德文,俄文和其他一些。我可以看到,即使对于非ASCII字符,结果似乎也不正确。

我根据文档发现Intl.Collator().compare

的Intl.Collat​​or目的是一种用于配页,对象,使语言敏感字符串比较的构造函数。

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

有没有其他解决方案我可以使用?

编辑

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

+0

有一个polyfill尝试,但polyfilling'Intl.Collat​​or'是相当不合理的:https://github.com/andyearnshaw/Intl.js/从webkit跟踪器的这个bug来看,似乎有一些进展这个问题虽然:https://bugs.webkit.org/show_bug.cgi?id=147601对于很多情况下,做服务器端排序也可能是一个可行的解决方案。 – nils

+0

@nils好的,我看到它有npm包,我会仔细看看。谢谢 –

+1

Node.js支持应该在那里。我只是在节点repl中尝试了'Intl.Collat​​or()',它似乎工作。 – nils

回答

1

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