标签:lse 修改 通讯录 ase test code oca item indexof
为了实现类似微信通讯录的效果,需要按汉字拼音顺序依次排序显示,在网上查找了相关方法后,根据自己需求做出相应修改,下面贴上代码:
var pySegSort=(arr) =>{ // 汉字拼音排序
if (!String.prototype.localeCompare) return null
let letters = ‘abcdefghjklmnopqrstwxyz‘.split(‘‘)
let zh = ‘阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀‘.split(‘‘)
let segs = [],other = { letter: ‘#‘,data:[] }
letters.forEach((v, i) => {
let cur = { letter: v.toUpperCase(), data: [] }
arr.forEach((item) => {
if(/^[\u4e00-\u9fa5a-zA-Z]/g.test(item)){ // 判断是否能根据字母匹配
if(item.localeCompare(zh[i])>=0&&item.localeCompare(zh[i+1])<0){
cur.data.push(item)
}
}else if(other.data.indexOf(item) < 0){
other.data.push(item)
}
})
if (cur.data.length) {
cur.data.sort(function(a, b) {
return a.localeCompare(b, ‘zh‘)
})
segs.push(cur)
}
})
if(other.data.length){ // 若包含未匹配拼音排序的加到最后一项
segs.push(other)
}
return segs
}
其中主要函数localeCompare用于比较字符串,换算规则暂时没有深入研究,将匹配出来的字段存放到另一数组中并排序,最后在与未匹配字段的数组合并后返回。返回结果格式:[{"letter":"A","data":[""]},{"letter":"B","data":[""]}]
标签:lse 修改 通讯录 ase test code oca item indexof
原文地址:https://www.cnblogs.com/neeter/p/11978634.html