有个类似微信通讯录的功能 但是安卓有兼容性问题,不过也记录一下吧

// arr是传入的数组
groupByDesc(arr) {
    const [...zhCN] = '啊八擦搭蛾发噶哈击喀垃妈拿哦啪期然撒塌挖昔压匝'
    // const [...EN] = 'abcdefghijklmnopqrstuvwxyz'
    const [...EN] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    // 中文在i、u、v下没有对应的汉字
    // const [...desc] = 'abcdefghjklmnopqrstwxyz'
    const [...desc] = 'ABCDEFGHJKLMNOPQRSTWXYZ'
    // 中文
    const isChinese = /[\u4e00-\u9fa5]+/
    // 英文
    const pattern = /[a-zA-Z]/;
    // const isSpecial = /[0-9*#@!%$&(),.+-]+/
    const hashMap = {}



    function findIndex(obj) {
        let check
        var length 
        let type = 'EN'
        if(isChinese.test(obj) ){
            length = zhCN.length
            check = zhCN
            type = 'zhCN'
            console.log('中文')
        }else{
            length = EN.length
            check = EN
            console.log('英文')
        }

        for (var i = 0; i < length ; i++) {
            console.log(obj,check[i],obj.localeCompare(check[i]))
        if (obj.localeCompare(check[i]) < 0) {
            if (type == 'zhCN') {
            return i -1 
                } else {
                    return i 
                }
            }else if(obj.localeCompare(check[i]) == 0){
                return i 
            }
        }
        return 22
    }
    arr.forEach(item => {

        let hashCode
        // 判断不是中文和英文
        if(!pattern.test(item.nickname[0])&&!isChinese.test(item.nickname[0])){
            hashCode = '#'
            // 中文
        }else if(isChinese.test(item.nickname[0] )){
            
            hashCode =   desc[findIndex(item.nickname[0] )] 
        // 英文
        }else{
            hashCode = EN[findIndex(item.nickname[0] )]
        }
        // 空
        if (!hashMap[hashCode]) {
            hashMap[hashCode] = []
        }
        // 赋值
        hashMap[hashCode].push(item)
    })
    console.log(hashMap)
    return hashMap
}

面向bug编程
1 声望0 粉丝

« 上一篇
初学 typescript