为了实现类似微信通讯录的效果,需要按汉字拼音顺序依次排序显示,在网上查找了相关方法后,根据自己需求做出相应修改,下面贴上代码:
var pySegSort=(arr) =>{ // 汉字拼音排序 if (!String.prototype.localeCompare) return null let letters = ‘abcdefghjklmnopqrstwxyz‘.split(‘‘) let zh = ‘阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀‘.split(‘‘) let segs = [],other = { letter: ‘#‘,data:[] } letters.forEach((v, i) => { let cur = { letter: v.toUpperCase(), data: [] } arr.forEach((item) => { if(/^[\u4e00-\u9fa5a-zA-Z]/g.test(item)){ // 判断是否能根据字母匹配 if(item.localeCompare(zh[i])>=0&&item.localeCompare(zh[i+1])<0){ cur.data.push(item) } }else if(other.data.indexOf(item) < 0){ other.data.push(item) } }) if (cur.data.length) { cur.data.sort(function(a, b) { return a.localeCompare(b, ‘zh‘) }) segs.push(cur) } }) if(other.data.length){ // 若包含未匹配拼音排序的加到最后一项 segs.push(other) } return segs }
其中主要函数localeCompare用于比较字符串,换算规则暂时没有深入研究,将匹配出来的字段存放到另一数组中并排序,最后在与未匹配字段的数组合并后返回。返回结果格式:[{"letter":"A","data":[""]},{"letter":"B","data":[""]}]
原文地址:https://www.cnblogs.com/neeter/p/11978634.html
时间: 2024-11-06 22:28:54