1、問題背景:
在做項目時候遇到一個小小的顯示客戶部門名稱(拼音)的業務,就是在部門名稱下有相應的拼音,而在現有的數據庫中沒有相應字段,并且部門數量比較多,添加起來比較費時,就想能否在js中實現,在頁面中處理。
2、原理描述
程序原理很簡單,網上可以找到漢字拼音的數據字典,但是由于大家都知道GB2312編碼里面漢字是按拼音排序的,只要知道各個拼音為首的漢字代碼,就可以計算所有漢字的拼音代碼了。
本文通過自定義用于存放漢字拼音與ascii碼對應的數據字典,再通過將需要轉換的漢字轉為ascii碼(兩位),最后通過查找字典匹配即可,具體實現見代碼。
3、實現代碼:
代碼如下:
<script language="javascript" type="text/javascript">
function hash(_key,_value)
{
this.key = _key; /* 拼音*/
this.value = _value; /* ascii碼*/
}
/* javascript 的自定義對象,用于存放漢字拼音數據字典*/
function dictionary()
{
this.items = [];
this.add = function(_key,_value)
{
this.items[this.items.length] = new hash(_key,_value);
}
}
/*漢字拼音的數據字典-共396個-通過組合聲母和韻母*/
var d = new dictionary();
d.add("a",-20319);
d.add("ai",-20317);
d.add("an",-20304);
d.add("ang",-20295);
d.add("ao",-20292);
d.add("ba",-20283);
d.add("bai",-20265);
d.add("ban",-20257);
d.add("bang",-20242);
d.add("bao",-20230);
d.add("bei",-20051);
d.add("ben",-20036);
d.add("beng",-20032);
d.add("bi",-20026);
d.add("bian",-20002);
d.add("biao",-19990);
d.add("bie",-19986);
d.add("bin",-19982);
d.add("bing",-19976);
d.add("bo",-19805);
d.add("bu",-19784);
d.add("ca",-19775);
d.add("cai",-19774);
d.add("can",-19763);
d.add("cang",-19756);
d.add("cao",-19751);
d.add("ce",-19746);
d.add("ceng",-19741);
d.add("cha",-19739);
d.add("chai",-19728);
d.add("chan",-19725);
d.add("chang",-19715);
d.add("chao",-19540);
d.add("che",-19531);
d.add("chen",-19525);
d.add("cheng",-19515);
d.add("chi",-19500);
d.add("chong",-19484);
d.add("chou",-19479);
d.add("chu",-19467);
d.add("chuai",-19289);
d.add("chuan",-19288);
d.add("chuang",-19281);
d.add("chui",-19275);
d.add("chun",-19270);
d.add("chuo",-19263);
d.add("ci",-19261);
d.add("cong",-19249);
d.add("cou",-19243);
d.add("cu",-19242);
d.add("cuan",-19238);
d.add("cui",-19235);
d.add("cun",-19227);
d.add("cuo",-19224);
d.add("da",-19218);
d.add("dai",-19212);
d.add("dan",-19038);
d.add("dang",-19023);
d.add("dao",-19018);
d.add("de",-19006);
d.add("deng",-19003);
d.add("di",-18996);
d.add("dian",-18977);
d.add("diao",-18961);
d.add("die",-18952);
d.add("ding",-18783);
d.add("diu",-18774);
d.add("dong",-18773);