js包括中文字符串的比较

基于jquery的使ListNav兼容中文首字拼音排序的实现代码
http://www.jb51.net/article/27643.htm
它是使用 jquery.charfirst.pinyin.js工具

原文 localeCompare

http://kewang.pixnet.net/blog/post/6574774-%E5%A6%82%E4%BD%95%E7%94%A8javascript%E5%81%9A%E4%B8%AD%E6%96%87%E6%8E%92%E5%BA%8F
巴豆夭在新增學校以及店家資料的時候,不是以字的筆劃做排序,而是以新增時間的先後做排序,所以使用者在搜尋學校和店家資料的時候會變的非常不方便。

所以我找了蠻多的資料,看看能不能在client端用javascript來做排序。不在server端用php做排序的原因,當然是為了怕server的loading變大,所以把這些資料抓回來用javascript做排序。

看了這兩篇「JavaScript中实现数组的排序、乱序和搜索。」 http://blog.iyi.cn/hily/archives/2005/09/javascript.html和「利用JavaScript的sort()对包含汉字字符串数组进行排序」 http://blog.iyi.cn/hily/archives/2005/10/javascriptsort.html之後,才知道javascript有localeCompare()這種函式可以拿來做本地化的字串比較。

localeCompare的使用方法就是像這樣:
ret = '國立宜蘭大學'.localeCompare('國立台灣大學')


原始字串(國立宜蘭大學)跟要比較的字串(國立台灣大學)做比較,如果原始字串比較小的話,則ret就會傳回小於0的數字;如果比較大的話,則傳回大於0的數字;如果相等就傳回0。

可是我在使用這個函式的時候,結果跟我想要的不太相同,因為我是想用中文字的筆劃來做排序,可是最後排出來的時候「大同大學」卻排在「國立宜蘭大學」的後面,實在很奇怪耶。

後來我又在石頭閒語看到了這篇文章「以動態網頁方式排序網頁的表格內容」 http://blog.roodo.com/rocksaying/archives/2793545.html之後,才了解這個問題目前好像是無解,我猜也許是因為unicode的關係吧(昏)。

後記:在IE上可以用筆劃做排序,可是在Firefox和Opera上卻不是如此,不知道Firefox和Opera依照的是什麼規則。


JavaScript localeCompare() 方法
http://www.w3school.com.cn/js/jsref_localeCompare.asp
定义和用法
用本地特定的顺序来比较两个字符串
语法
stringObject.localeCompare(target)

参数 描述
target 要以本地特定的顺序与 stringObject 进行比较的字符串。
返回值
说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。
说明
把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。
localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。
实例
在本例中,我们将用本地特定排序规则对字符串数组进行排序:
var str;
str.sort (function(a,b){return a.localeCompare(b)})

你可能感兴趣的:(字符串)