是否有任何javascript库与字母表的排序方法的实现,如瑞典语?

时间:2013-01-25 19:27:57

标签: javascript sorting localization internationalization

我知道您可以使用方法' localeCompare '使用您自己的本地化对数组进行排序,如下所示:

aArray.sort(function(a,b){return a.localeCompare(b)});

但是,我认为瑞典网站的大多数(几乎所有)访问者都了解瑞典语,因此无论他/她目前使用哪种“ locale ”,他们都会期待瑞典语排序。

(我认为现在有些人会想要争论这个假设,但我真的认为会有更多的人理解瑞典语,但目前使用的是其他语言环境而不是人们不知道希望“å”和“ä”被排序等同于“a”和“ö”排序等同于“o”的瑞典字母表。 我真的希望最后三个瑞典字母“åäö”到始终按顺序排序,无论的浏览器或操作系统,无论它是什么定义“语言环境“由方法使用” localeCompare “)

一种解决方案可能是以编程方式强制执行“localeCompare”方法时使用的“语言环境”,但据我所知,这是不可能的。 (虽然如果它确实可行,那么你如何改变语言环境?)

这个排序问题对所有瑞典javascript程序员来说应该是相当普遍的,但我仍然无法找到任何开源库,其中包含瑞典字符串比较方法的实现。 这里有没有人知道这样一个库(与sort方法一起使用时性能良好)重用而不是试图自己实现它?

3 个答案:

答案 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浏览器中对其进行排序。