有个相似微信通讯录的性能 然而安卓有兼容性问题,不过也记录一下吧
// 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}