js中如何根据汉字生成拼音首字母

JavaScript012

js中如何根据汉字生成拼音首字母,第1张

//参数,中文字符串

//返回值:拼音首字母串数组  

function makePy(str){  

if(typeof(str) != "string")  

throw new Error(-1,"函数makePy需要字符串类型参数!")  

var arrResult = new Array() //保存中间结果的数组  

for(var i=0,len=str.lengthi<leni++){  

//获得unicode码  

var ch = str.charAt(i)  

//检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理  

arrResult.push(checkCh(ch))  

}  

//处理arrResult,返回所有可能的拼音首字母串数组  

return mkRslt(arrResult)  

}  

function checkCh(ch){  

var uni = ch.charCodeAt(0)  

//如果不在汉字处理范围之内,返回原字符,也可以调用自己的处理函数  

if(uni > 40869 || uni < 19968)  

return ch //dealWithOthers(ch)  

//检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母  

return (oMultiDiff[uni]?oMultiDiff[uni]:(strChineseFirstPY.charAt(uni-19968)))  

}  

function mkRslt(arr){  

var arrRslt = [""]  

for(var i=0,len=arr.lengthi<leni++){  

var str = arr[i]  

var strlen = str.length  

if(strlen == 1){  

for(var k=0k<arrRslt.lengthk++){  

arrRslt[k] += str  

}  

}else{  

var tmpArr = arrRslt.slice(0)  

arrRslt = []  

for(k=0k<strlenk++){  

//复制一个相同的arrRslt  

var tmp = tmpArr.slice(0)  

//把当前字符str[k]添加到每个元素末尾  

for(var j=0j<tmp.lengthj++){  

tmp[j] += str.charAt(k)  

}  

//把复制并修改后的数组连接到arrRslt上  

arrRslt = arrRslt.concat(tmp)  

}  

}  

}  

return arrRslt  

}  

//两端去空格函数  

String.prototype.trim = function() {    return this.replace(/(^\s*)|(\s*$)/g,"") }  

  

//查看拼音首字母缩写  

function query(){  

    var str = document.getElementById("txtChinese").value.trim()  

    if(str == "") return  

    var arrRslt = makePy(str)  

    alert(arrRslt)

我先做一个显示完整拼音的脚本如下(把下面的内容保存为一个html文件用IE打开即可显示zhong hua ren min gong he guo):

<script type="text/vbscript">

function vbChr(c)

vbChr = chr(c)

end function

function vbAsc(n)

vbAsc = asc(n)

end function

</script>

<script language=javascript>

var py=new Array(20319,

20283,

19775,

19218,

18710,

18526,

18239,

17922,

17922,

17417,

16474,

16212,

15640,

15165,

14922,

14914,

14630,

14149,

14090,

13318,

13318,

13318,

12838,

12556,

11847,

11055,0)

function getPinYin(index){

var i

if(index==0x1534) return 'y'

if(index>0x4F5F||index<0x2807) return ''

i=0while(py[i]>=index)i++

if (i==9) i--

if(i==21 || i==22) i=20

return vbChr(96+i)

}

function pinyin(s){

var i,s2=''

for (i=0i<s.lengthi++)s2+=(getPinYin(0-vbAsc(s.charAt(i))))

return s2

}

document.writeln(pinyin('中华人民共和国'))

</script>

我马上要到我的空间发表一篇显示完整拼音的文章,请多指教。

中文拼音排序一直都是很有趣的一个问题。推荐使用这个函数 String.prototype.localeCompare(),链接 MDN。首先用 localeCompare 试下拼音排序

var array = ['武汉', '北京', '上海', '天津']

array.sort(

function compareFunction(param1, param2) {

return param1.localeCompare(param2)

}

)

array // ["北京", "上海", "天津", "武汉"]

然后根据 26 个英文字母分组排序,函数如下,

function pySegSort(arr) {

if(!String.prototype.localeCompare)

return null

var letters = "*abcdefghjklmnopqrstwxyz".split('')

var zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split('')

var segs = []

var curr

letters.forEach(function(item,i){

curr = {letter: item, data:[]}

arr.forEach(function(item2){

if((!zh[i-1] || zh[i-1].localeCompare(item2) <= 0) &&item2.localeCompare(zh[i]) == -1) {

curr.data.push(item2)

}

})

if(curr.data.length) {

segs.push(curr)

curr.data.sort(function(a,b){

return a.localeCompare(b)

})

}

})

return segs

}

测试:

pySegSort(["我","不","懂","爱","啊","按","已","呀","选","县"])

结果:

[{"letter":"a","data":["啊","爱","按"]},{"letter":"b","data":["不"]},{"letter":"d","data":["懂"]},{"letter":"w","data":["我"]},{"letter":"x","data":["县","选"]},{"letter":"y","data":["呀","已"]}]

var arr = ["张三","李四","王五","阿三"] 

document.write(arr+"")

arr.sort(function(a,b){

return a.localeCompare(b)

})

document.write(arr)

定义和用法:

用本地特定的顺序来比较两个字符串。

语法:

stringObject.localeCompare(target)

参数描述:

target    要以本地特定的顺序与 stringObject 进行比较的字符串。  

返回值:

说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。

说明:

把 <和 >运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。

localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。

参考资料

百度知道.百度知道[引用时间2018-1-5]