//参数,中文字符串
//返回值:拼音首字母串数组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)
1、新建一个html文件,命名为test.html。
2、在test.html文件内,在p标签内,使用input标签创建一个字符串输入框。
3、在test.html文件内,设置input元素的id为myinput,主要用于下面通过该id获得input对象。
4、在test.html文件内,使用button标签创建一个按钮。
5、在test.html文件中,给button按钮绑定onclick点击事件,当按钮被点击时,执行getlast()函数。
6、在js标签中,创建getlast()函数,在函数内,通过getElementById()方法获得input对象。
7、在浏览器打开test.html文件,点击按钮,查看结果。
中文拼音排序一直都是很有趣的一个问题。推荐使用这个函数 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]