我知道您可以使用方法' localeCompare '使用您自己的本地化对数组进行排序,如下所示:
aArray.sort(function(a,b){return a.localeCompare(b)});
但是,我认为瑞典网站的大多数(几乎所有)访问者都了解瑞典语,因此无论他/她目前使用哪种“ locale ”,他们都会期待瑞典语排序。
(我认为现在有些人会想要争论这个假设,但我真的认为会有更多的人理解瑞典语,但目前使用的是其他语言环境而不是人们不知道希望“å”和“ä”被排序等同于“a”和“ö”排序等同于“o”的瑞典字母表。 我真的希望最后三个瑞典字母“åäö”到始终按顺序排序,无论的浏览器或操作系统,无论它是什么定义“语言环境“由方法使用” localeCompare “)
一种解决方案可能是以编程方式强制执行“localeCompare”方法时使用的“语言环境”,但据我所知,这是不可能的。 (虽然如果它确实可行,那么你如何改变语言环境?)
这个排序问题对所有瑞典javascript程序员来说应该是相当普遍的,但我仍然无法找到任何开源库,其中包含瑞典字符串比较方法的实现。 这里有没有人知道这样一个库(与sort方法一起使用时性能良好)重用而不是试图自己实现它?
答案 0 :(得分:1)
JavaScript Internationalization API完全符合您的需求。第I页引用了一些用法示例。不幸的是,浏览器还没有广泛支持它。
答案 1 :(得分:0)
@Richard Marr(评论Is there any javascript library with implementations of sort methods for alphabets such as swedish?)
嗯,我不确定这会非常困难,但对我而言,可能不是很容易使它像javascript一样高效。 感觉就像试图重新发明轮子一样,擅长javascript的人可能已经做得比我做得更好。 考虑到几乎任何事物都存在多少个开源库,我不得不意识到这个东西还不存在。
关于
的代码段'sort(function(a,b){ return position[a] - position[b]; })'
在我看来,因为你期望a和b成为角色。 例如,我认为以下类型的结构是您的想法:
var position = {
// e.g. essentially the codes here: http://en.wikipedia.org/wiki/Multinational_Character_Set
'A': 65,
'B': 66,
//...
// the three swedish characters:
//'Ä': 196,
//'Å: 197,
//'Ö': 214,
// The above are the correct values according to the codes, but the relative ordering of Å and Ä is not correct for swedish so therefore I switch the values below:
'Å': 196,
'Ä': 197,
'Ö': 214
};
确实可以使用这样的位置结构,但由于sort方法的函数参数接收两个任意字符串而不是只有一个字符的字符串,所以我猜两个字符串中的每个字符(直到第一个区别)都必须迭代并与位置结构进行比较。 我希望有一种更好(更有效)的方式......
答案 2 :(得分:0)
@Pawel Dyda(评论Is there any javascript library with implementations of sort methods for alphabets such as swedish?)
不,不仅仅是JS,但我找到了jQuery tablesorter,我认为这是一个很好的,但是当我找到以下代码时遇到了排序问题:
$('table').tablesorter({
textSorter: function(a,b) {
return a.localeCompare(b);
}
});
(在http://mottie.github.com/tablesorter/docs/页面的“sortLocaleCompare”中记录)
事实上,我打算在服务器上实现排序,也支持使用禁用javascript的客户端,但对于使用javascript的客户,我认为我可以使用tablesorter而无需再次请求Web服务器获取相同的结果集(但排序不同)。 至少为结果集实现它非常简单,不需要分页,即当所有行都适合一个页面时,你就可以为jQuery tablesorter生成“ serverSideSorting:false ”然后它自动将在Web浏览器中对其进行排序。