中英文按首字母分组排序
// 检测是否为中文,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 }