2015-02-11 80 views
1

拉丁字符串我做這個實驗的REPL排序在ClojureScript

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

我得到這個:

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

正確的答案是這樣的:

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

是否有辦法在ClojureScript中本地排序拉丁字符串?

我問過關於Clojure的同樣的問題,但我也需要知道如何在ClojureScript中做到這一點。

回答

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"]) 

basic supportlocaleCompare是臺式機和移動瀏覽器的廣泛。在我的機器上,這兩種排序返回相同的結果。但是,對於每個瀏覽器,情況可能並非如此:

在較早的實現中,忽略語言環境和選項參數,所使用的語言環境和排序順序完全取決於實現。

但每一個實現語言環境選項參數也實現Intl/Collator瀏覽器。

+1

根據[caniuse.com](http://caniuse.com/#feat=internationalization),Safari 7/8,iOS 7.1和8.1,IE 10及更低版本和Android 4.3及更低版本不支持Collat​​or 。對於Android 4.4,它尚未得到確認。 – 2015-02-13 11:10:17