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

JavaScript020

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]

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

resultValue= resultValue.sort(

function compareFunction(param1,param2){

return param1.localeCompare(param2)

}

)

resultValue结果为:

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

数据结构算法中排序有很多种,常见的、不常见的,至少包含十种以上。根据它们的特性,可以大致分为两种类型:比较类排序和非比较类排序

冒泡排序是一次比较两个元素,如果顺序是错误的就把它们交换过来。,直到不需要再交换

快速排序的基本思想是通过一趟排序,将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以分别对这两部分记录继续进行排序,以达到整个序列有序

从数列中挑出一个元素,称为 “基准”(pivot);然后重新排序数列,所有元素比基准值小的摆放在基准前面、比基准值大的摆在基准的后面;在这个区分搞定之后,该基准就处于数列的中间位置;然后把小于基准值元素的子数列(left)和大于基准值元素的子数列(right)递归地调用 quick 方法排序完成,这就是快排的思路

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,从而达到排序的效果

插入排序的思路是基于数组本身进行调整的,首先循环遍历从 i 等于 1 开始,拿到当前的 current 的值,去和前面的值比较,如果前面的大于当前的值,就把前面的值和当前的那个值进行交换,通过这样不断循环达到了排序的目的

将最小的元素存放在序列的起始位置,再从剩余未排序元素中继续寻找最小元素,然后放到已排序的序列后面……以此类推,直到所有元素均排序完毕

堆排序是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质,即子结点的键值或索引总是小于(或者大于)它的父节点。堆的底层实际上就是一棵完全二叉树,可以用数组实现

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

通过 mid 可以把该数组分成左右两个数组,分别对这两个进行递归调用排序方法,最后将两个数组按照顺序归并起来