简单的按照汉字,字母的首字母分组

简单的按照汉字和首字母分组,将数字开头的数据提取出来归类到一起

{letter: '数字开头', data:[]}

//假设一原始数据为 originArr 很常见的用户信息
let originArr = [
{phone: 13522147257, name: "张三"},
{phone: 15022147429, name: "张er"},
{phone: 15022147429, name: "张二"},
{phone: 18255726547, name: "李四"},
{phone: 13822475698, name: "alise"},
{phone: 13944125478, name: "alaen"},
{phone: 18222695475, name: "tom"},
{phone: 15033214759, name: 457},
{phone: 18755412698, name: 126},
]

将上述原始数据的格式改为:

{name:  '张三',  data:  {name:  '张三',  phone:  '15022147429'}}

//假设一原始数据为 originArr 很常见的用户信息
        let originArr = [
            {phone: 13522147257, name: "张三"},
            {phone: 15022147429, name: "张er"},
            {phone: 15022147429, name: "张二"},
            {phone: 18255726547, name: "李四"},
            {phone: 13822475698, name: "alise"},
            {phone: 13944125478, name: "alaen"},
            {phone: 18222695475, name: "tom"},
            {phone: 15033214759, name: 457},
            {phone: 18755412698, name: 126},
        ]
        //将用户名提取出来,做成如下数据结构 data 后跟原始数据就行
        // {name: '张三', data: {name: '张三', phone: '15022147429'}}
        let arr = []
        originArr.map(item => {
            let tmp = item.name
            arr.push({'name': tmp, 'data': item}) 
        })
        function someSort(arr) {
              if(!String.prototype.localeCompare)
                return null;

              let letters = "*abcdefghjklmnopqrstwxyz".split('');
              let zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split('');

              let segs = [];
              let numArr;
              //如果是数字,分离出来,格式改为
              numArr = {letter: '数字开头', data:[]}
              for (let i = 0 ; i < arr.length; i++) {
                  //判断是不是数字开头
                  if (!isNaN(parseInt(arr[i].name))) {
                      numArr.data.push(arr[i].data)
                      arr.splice(i, 1)
                      i--
                  }
              }
              letters.forEach(function(item,i){
                let curr = {letter: item.toUpperCase(), data:[]};
                arr.forEach(function(item2){
                    let it = String(item2.name)
                    it = it.substr(0, 1)
                    //正则验证名字的第一位是字母还是汉字
                    let hanzi = /[\u4E00-\u9FA5]/
                    let hanziFlag = hanzi.test(it)

                    let word = /[a-zA-Z]/
                    let wordFlag = word.test(it)

                    if (hanziFlag) {
                        if((!zh[i-1] || zh[i-1].localeCompare(it,'zh') <= 0) && (it.localeCompare(zh[i], 'zh') == -1)) {
                            curr.data.push(item2.data);
                        }
                    }
                    if (wordFlag) {
                        //统一转换为小写
                        it = it.toLowerCase()
                        if(it === item) {
                            curr.data.push(item2.data);
                            // console.log(curr)
                        }
                    }
                })
                if (curr.data.length > 0) {
                    segs.push(curr)
                    curr.data.sort(function(a,b){
                        return a.name.localeCompare(b.name,'zh');
                    })
                }
              })
              segs.push(numArr)
              return segs;
            }
            someSort(arr)

最终输出:

[
    {
        "letter": "A", 
        "data": [
            {
                "phone": 13944125478, 
                "name": "alaen"
            }, 
            {
                "phone": 13822475698, 
                "name": "alise"
            }
        ]
    }, 
    {
        "letter": "L", 
        "data": [
            {
                "phone": 18255726547, 
                "name": "李四"
            }
        ]
    }, 
    {
        "letter": "T", 
        "data": [
            {
                "phone": 18222695475, 
                "name": "tom"
            }
        ]
    }, 
    {
        "letter": "Z", 
        "data": [
            {
                "phone": 15022147429, 
                "name": "张二"
            }, 
            {
                "phone": 13522147257, 
                "name": "张三"
            }, 
            {
                "phone": 15022147429, 
                "name": "张er"
            }
        ]
    }, 
    {
        "letter": "数字开头", 
        "data": [
            {
                "phone": 15033214759, 
                "name": 457
            }, 
            {
                "phone": 18755412698, 
                "name": 126
            }
        ]
    }
]
View Code



猜你喜欢

转载自www.cnblogs.com/lonfate/p/9173836.html
今日推荐