// 检测是否为中文,true表示是中文,false表示非中文
const isChinese = (str) => {
// 中文万国码正则
if (/[\u4E00-\u9FCC\u3400-\u4DB5\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\ud840-\ud868][\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|[\ud86a-\ud86c][\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d]/.test(str)) {
return true;
} else {
return false;
}
}
// 检测英文
const isEnglish = (str) => {
return (/^[a-zA-Z]+$/.test(str))
}
const chineseSort = (arrList,compareItem) => {
let arr = arrList.concat([])
if (!String.prototype.localeCompare) return null
let letters = 'abcdefghijklmnopqrstuvwxyz'.split('')
let zh = '阿八嚓哒妸发旮哈i讥咔垃吗拏噢妑七呥撒它uv挖夕丫帀'.split('')
let segs = [{letter: '#',data: []}]
letters.map((item, i) => {
let cur = { letter: item, data: [] }
arr.map((item,index) => {
item[compareItem] = item[compareItem].replace(/\s/g,"")
if(isChinese(item[compareItem].split('')[0])){
if(!(i==8 || i==20 || i==21)){
let next = i+1
if(i==7){
next = i+2
}
if(i==19){
next = i+3
}
if (item[compareItem].localeCompare(zh[i]) >= 0 && item[compareItem].localeCompare(zh[next]) < 0) {
cur.data.push(item)
}
}
}else if(isEnglish(item[compareItem].split('')[0])){
if (item[compareItem].toLowerCase().localeCompare(letters[i]) >= 0 && item[compareItem].toLowerCase().localeCompare(letters[i + 1]) < 0) {
cur.data.push(item)
}
}else{
segs[0].data.push(item)
arr.splice(index,1)
}
})
if (cur.data.length) {
cur.data.sort(function (a, b) {
return a[compareItem].localeCompare(b[compareItem])
})
segs.push(cur)
}
})
if(segs[0].data.length<=0){
segs.shift()
}
return segs
}