乐趣区

关于小程序:中文排序分块

有个相似微信通讯录的性能 然而安卓有兼容性问题, 不过也记录一下吧

// 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
}
退出移动版