国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript實現拼音排序的方法

2024-05-06 14:20:53
字體:
來源:轉載
供稿:網友
一般情況下,大家會使用下面的方法來進行漢字的拼音排序
代碼如下:
var list = [ '王', '張','李'];
list.sort(function (a, b) {
return a.localeCompare(b);
});

localeCompare() :用本地特定的順序來比較兩個字符串。
通過localeCompare這個方法來進行拼音排序的不可靠之處在于:
1. 很依賴中文操作系統
2. 很依賴瀏覽器的內核
也就是說,如果你的網站訪問者是通過非中文系統,或者非IE瀏覽器(如Chrome),那么他將很可能無法看到我們所預期的拼音排序結果。
--------------------------------------------------------------------------------
下面介紹一下我解決這個問題的辦法,希望能拋磚引玉哈:
本方法支持Unicode字符集中從0x4E00到 0x9FA5 的連續區域內共20902個來自中國(包括臺灣)、日本、韓國的漢字,即CJK(Chinese Japanese Korean)漢字。
代碼如下:
var CompareStrings = {
db: '吖阿啊錒錒嗄哎哀...袰襨鐢閪闏霻鶑', // 其中省略幾萬字
getOrderedUnicode: function (char) {
var originalUnicode = char.charCodeAt();
if (originalUnicode >= 0x4E00 && originalUnicode <= 0x9FA5) {
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 < count; i++) {
  var au = this.getOrderedUnicode(a[i]);
  var bu = this.getOrderedUnicode(b[i]);
  if (au > bu) {
   return 1;
  } else if (au < bu) {
   return -1;
  }
}
return a.length > b.length ? 1 : -1;
 }
}
// 重寫系統原生的localeCompare
String.prototype.localeCompare = function (param) {
  return CompareStrings.compare(this.toString(), param);
}

大家可以通過下面的鏈接下載到完整代碼 http://xiazai.Vevb.com/201211/yuanma/js_pinyin_jb51.rar
簡單介紹一下實現的原理:
1. 取得按拼音排序好的字庫(db):有多種途徑可以達到目的,我是用JavaScript+C#組合完成的,先用腳本把所有漢字枚舉出來,再提交到C#后臺排序好,再輸出到前臺,這個只是準備工作哈,怎么搞都可以。
2. 確定兩個字符誰比較大(getOrderedUnicode):因為排序的時候,不光要處理漢字,還要處理漢字以外的字符,所以比較器必須能識別所有的字符,這里我們通過判斷一個字符是否是漢字來區別對待:如果是漢字,那么就在排序好的字庫里搜索它的索引值,得到的索引值再加上Unicode字符集中第一個漢字所處的位置,就是在“校準”以后的Unicode字符集中的索引值了;如果不是漢字,那么就直接返回它在Unicode字符集中的索引值即可。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 虹口区| 读书| 唐海县| 龙江县| 东平县| 封丘县| 兴海县| 资中县| 平定县| 绥滨县| 汕头市| 成都市| 汝州市| 准格尔旗| 鄂伦春自治旗| 金坛市| 苗栗县| 织金县| 榆社县| 丰都县| 收藏| 万年县| 邻水| 县级市| 奎屯市| 岳西县| 宝坻区| 宁武县| 连云港市| 通许县| 景洪市| 长顺县| 册亨县| 株洲县| 卓尼县| 剑阁县| 仁怀市| 内丘县| 龙州县| 崇州市| 新泰市|