Js根据拼音首字母分组

2 篇文章 0 订阅

记录一下Js根据拼音首字母分组的方法
引自https://segmentfault.com/a/1190000017321316
如有侵权请联系。

const pySegSort=(arr) =>{
    if (!String.prototype.localeCompare) return null
    // let letters = 'abcdefghjklmnopqrstwxyz'.split('')
    let letters = 'ABCDEFGHJKLMNOPQRSTWXYZ'.split('')
    let zh = '阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀'.split('')
    let segs = []
    letters.forEach((item, i) => {
        let cur = { letter: item, data: [] }
        arr.forEach((item) => {
            if(item.localeCompare(zh[i])>=0&&item.localeCompare(zh[i+1])<0){
                cur.data.push(item)
            }         
        })
        if (cur.data.length) {   
                cur.data.sort(function(a, b) {
                    return a.localeCompare(b, 'zh')
                })
                segs.push(cur)
            }
    })

    return segs
}

console.log(pySegSort(['白案','百搭','白菜','百旺','王','李','张','刘','陈','杨','黄','吴','赵','周','的','徐','孙','马','朱','胡','林','郭','何','高','罗','','郑','梁','谢','宋','唐','许','邓','冯','韩','曹','曾','彭','白大','萧','蔡','F','潘','田','董','袁','于','余','','叶','蒋','杜','苏','魏','程','吕','丁','沈','任','白','卞']))

结果

[
  {
    letter: 'B',
    data: [
      '白',   '白案',
      '白菜', '白大',
      '百搭', '百旺',
      '卞'
    ]
  },
  { letter: 'C', data: [ '蔡', '曹', '曾', '沈', '陈', '程' ] },
  { letter: 'D', data: [ '的', '邓', '丁', '董', '杜' ] },      
  { letter: 'F', data: [ '冯' ] },
  { letter: 'G', data: [ '高', '郭' ] },
  { letter: 'H', data: [ '韩', '何', '胡', '黄' ] },
  { letter: 'J', data: [ '蒋' ] },
  { letter: 'L', data: [ '李', '梁', '林' ] },
  { letter: 'M', data: [ '刘', '吕', '罗', '马' ] },
  { letter: 'P', data: [ '潘', '彭' ] },
  { letter: 'R', data: [ '任' ] },
  { letter: 'S', data: [ '宋', '苏', '孙' ] },
  { letter: 'T', data: [ '唐', '田' ] },
  { letter: 'W', data: [ '王', '魏', '吴' ] },
  { letter: 'X', data: [ '萧', '谢', '徐', '许' ] },
  { letter: 'Y', data: [ '杨', '叶', '于', '余', '袁' ] },
  { letter: 'Z', data: [ '张', '赵', '郑', '周', '朱', 'F' ] }
]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值