我在repl上做了这个实验
(sort ["maa" "ácw" "ijl" "aez" "jkl"])
我明白了:
("aez" "ijl" "jkl" "maa" "ácw")
正确的答案是:
("ácw" "aez" "ijl" "jkl" "maa")
有没有办法在ClojureScript中对拉丁字符串进行本地排序?
我问过关于Clojure的同样问题,但我也需要知道如何在ClojureScript中做到这一点。
答案 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
。