共计 1170 个字符,预计需要花费 3 分钟才能阅读完成。
有个相似微信通讯录的性能 然而安卓有兼容性问题, 不过也记录一下吧
// 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
}
正文完