首頁 >web前端 >js教程 >JavaScript實作拼音排序的方法_javascript技巧

JavaScript實作拼音排序的方法_javascript技巧

WBOY
WBOY原創
2016-05-16 17:48:061642瀏覽

一般情況下,大家會用下面的方法來進行漢字的拼音排序

複製程式碼 代碼如下:


代碼如下:


代碼如下:



代碼如下:


var list = [ '王', '張','李'];
list.sort(function (a, b) {
return a.localeCompare(b); 也就是說,如果你的網站訪客是透過非中文系統,或非IE瀏覽器(如Chrome),那麼他將很可能無法看到我們所預期的拼音排序結果。
----------------------------------------------- ---------------------------------
下面介紹一下我解決這個問題的方法,希望能拋磚引玉哈:
本方法支援Unicode字元集中從0x4E00到0x9FA5 的連續區域內共20902個來自中國(包括台灣)、日本、韓國的漢字,即CJK(Chinese Japanese Korean)漢字。




複製代碼


代碼如下:


var CompareStrings = {


var CompareStrings = {
db:
db:啊錕錒嗄哎哀...袰襨鐢閪閔霚鶑', // 其中省略幾萬字
getOrderedUnicode: function (char) {
var originalUnicode = char.charCodeAt(); if (originalUnicode >= 0x4E00 && originalUnicode var index = this.db.indexOf(char);
if (index > -1) {
return index 0x4E00;
}
return originalUnicode;
},
compare: function (a, b) {
if (a == b) {  return 0;
}
//這裡可以根據具體需求來改寫,目前的寫法是把空字串排在最後if (a.length == 0) { return 1; }
if (b.length == 0) { return -1; }
var count = a.length > b.length ? b.length : a.length;
for (var i = 0; i   var au = this.getOrderedUnicode( a[i]);
  var bu = this.getOrderedUnicode(b[i]);
  if (au > bu) {
   return 1;
  (
   return -1;
  }
}
return a.length > b.length ? 1 : -1;
 } } localeCompare String.prototype.localeCompare = function (param) {   return CompareStrings.compare(this.toString(), param); } 連結下載到完整程式碼http://xiazai.jb51.net/201211/yuanma/js_pinyin_jb51.rar 簡單介紹一下實現的原理: 1. 取得按拼音排序好的字庫(db):有多種途徑可以達到目的,我是用JavaScript C#組合完成的,先用腳本把所有漢字枚舉出來,再提交到C#後台排序好,再輸出到前台,這個只是準備工作哈,怎麼搞都可以。 2. 確定兩個字符誰比較大(getOrderedUnicode):因為排序的時候,不光要處理漢字,還要處理漢字以外的字符,所以比較器必須能識別所有的字符,這裡我們通過判斷一個字符是否是漢字來區別對待:如果是漢字,那麼就在排序好的字庫裡搜尋它的索引值,得到的索引值再加上Unicode字元集中第一個漢字所處的位置,就是在「校準」以後的Unicode字元集中的索引值了;如果不是漢字,那麼就直接傳回它在Unicode字元集中的索引值即可。 3. 比較兩個字串(compare):逐一比較兩個字串中的每一個字元(在有效範圍內比較,也就是較短的那個字串的長度),如果發現a比b大,就返回1,反之返回-1。 4. 在有效範圍內比較結束後如果還沒分出勝負,就看誰比較長,例如a='123',b='1234',那麼較長的b要排在後面。 綠色通道: 好文要頂 追蹤我 收藏該文與我聯繫
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn