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

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

  

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

猜你喜欢

转载自www.cnblogs.com/neeter/p/11978634.html