javascript中文按照拼音首字母排序,如何实现?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript中文按照拼音首字母排序,如何实现?相关的知识,希望对你有一定的参考价值。
中文拼音排序一直都是很有趣的一个问题。推荐使用这个函数 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]
参考技术A中文(全拼/简拼)、英文混合按照首字母排序提取码:41e6
参考技术B var arr = ["张三","李四","王五","阿三"];document.write(arr+"<br/>");
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 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。 参考技术C 英文排序具有天生的优势:字符序(字母在字符集里的顺序)跟字母序是一致的。
而中文的拼音、笔画都跟字符序没有固定的关系,想要实现这样的功能,只能自行通过映射拼音、笔画来实现。
以上是关于javascript中文按照拼音首字母排序,如何实现?的主要内容,如果未能解决你的问题,请参考以下文章