在ClojureScript中对拉丁字符串进行排序

时间:2015-02-11 17:31:13

标签: sorting clojurescript

我在repl上做了这个实验

(sort ["maa" "ácw" "ijl" "aez" "jkl"])

我明白了:

("aez" "ijl" "jkl" "maa" "ácw")

正确的答案是:

("ácw" "aez" "ijl" "jkl" "maa")

有没有办法在ClojureScript中对拉丁字符串进行本地排序?

我问过关于Clojure的同样问题,但我也需要知道如何在ClojureScript中做到这一点。

1 个答案:

答案 0 :(得分:1)

modern browsers中,答案是Collator对象:

 (let [collator (Intl/Collator. "pt-BR")]
   (sort #(.compare collator %1 %2) ["aez" "ijl" "jkl" "maa" "ácw"]))

使用“pt-BR”作为语言环境,结果是:

("ácw" "aez" "ijl" "jkl" "maa")

Intl/Collator的缺点是大多数移动浏览器都不支持,目前只有Chrome支持它。

您也可以尝试使用localeCompare

(sort #(.localeCompare %1 %2) ["aez" "ijl" "jkl" "maa" "ácw"])

localeCompare basic support在桌面和移动浏览器中很常见。在我的机器上,两个排序都返回相同的结果。但对于每个浏览器而言可能并非如此:

  

在忽略locales和options参数的旧实现中,使用的语言环境和排序顺序完全取决于实现。

但是,实现语言环境选项参数的每个浏览器也实现了Intl/Collator