84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
最近需要做一个类似于微信好友列表的界面,后端只返回简单的查询结果,如何在后端不提供汉字按拼音首字母排序结果的情况下,前端自行将汉字按拼音首字母排序,有什么好的开源类库,还是有什么好的汉字与字母的映射表或编码表可用。
认证0级讲师
楼主这个问题很不错,中文拼音排序一直都是很有趣的一个问题。推荐使用这个函数 String.prototype.localeCompare(),链接 MDN。
String.prototype.localeCompare()
给题主分享一下我之前弄过的(代码不是我原创,也是模仿别人写的),首先用 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":["呀","已"]}]
这个函数还有很多坑要爬,比如中英文混搭排序等,祝题主好运。
https://github.com/hotoo/pinyin
楼主这个问题很不错,中文拼音排序一直都是很有趣的一个问题。推荐使用这个函数
String.prototype.localeCompare()
,链接 MDN。给题主分享一下我之前弄过的(代码不是我原创,也是模仿别人写的),首先用 localeCompare 试下拼音排序:
然后根据 26 个英文字母分组排序,函数如下,
测试:
结果:
[{"letter":"a","data":["啊","爱","按"]},{"letter":"b","data":["不"]},{"letter":"d","data":["懂"]},{"letter":"w","data":["我"]},{"letter":"x","data":["县","选"]},{"letter":"y","data":["呀","已"]}]
这个函数还有很多坑要爬,比如中英文混搭排序等,祝题主好运。
https://github.com/hotoo/pinyin