javascript中文按照拼音首字母排序,如何实现?

JavaScript09

javascript中文按照拼音首字母排序,如何实现?,第1张

中文拼音排序一直都是很有趣的一个问题。推荐使用这个函数 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]

var arr = ['01','03','02','11','13','12','21','23','20']

arr.sort(function(a, b) {

    return (a % 10 == 0 ? +a + 2 + "" : a).split("").reverse().join("") - (b % 10 == 0 ? +b + 2 + "" : b).split("").reverse().join("")

})

sort方法里面的函数就是这个规则。返回负数代表前一个小,返回0代表一样大,返回正数代表后一小

如下:

">

<html> <head>  <meta http-equiv="Content-Type" content="text/html charset=gbk">  <title>Untitled Document</title>  <script>   window.onload=function(){    var a="1我a2你b3他d"   //要排序的字符串a    var b=a.split("")       //分割字符串a为数组b    b.sort()              //数组b升序排序(系统自带的方法)    var c=b.join("")        //把数组b每个元素连接成字符串c    alert(c)              //输出最终排序好的字符串   }  </script> </head> <body> </body>

</html>

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。

反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。