码迷,mamicode.com
首页 > 编程语言 > 详细

数组中的汉字依拼音顺序进行排序

时间:2019-12-03 19:54:16      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:lse   修改   通讯录   ase   test   code   oca   item   indexof   

为了实现类似微信通讯录的效果,需要按汉字拼音顺序依次排序显示,在网上查找了相关方法后,根据自己需求做出相应修改,下面贴上代码:

  

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":[""]}]

数组中的汉字依拼音顺序进行排序

标签:lse   修改   通讯录   ase   test   code   oca   item   indexof   

原文地址:https://www.cnblogs.com/neeter/p/11978634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!