var arr = [{
addSource: 0,
attachedInfo: "",
birth: 0,
createTime: 1657356961,
email: "xxxx@qq.com",
ex: "xxx",
faceURL: "https://xxx.xxx.com.cn/temp/20220419_1650350168527.jpg",
gender: 1,
nickname: "平超豪",
operatorUserID: "",
ownerUserID: "e9ca23d68d884d4ebb19d07889727dae",
phoneNumber: "",
remark: "",
userID: ""
}]
function pySegSort(arr) {
if (arr.length == 0) return;
if (!String.prototype.localeCompare) return null;
var letters = "#ABCDEFGHJKLMNOPQRSTWXYZ".split("");
var zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split("");
var segs: any = []; // 存放数据
var res: any = {};
let curr: any;
var re = /[^\u4e00-\u9fa5]/; //中文正则
var pattern = new RegExp("[`\\-~!@#$^&*()=|{}':;',\\[\\].<>《》/?~!@#¥……&*()——|{}【】‘;:”“'。,、?12345678990]"); //特殊符号
letters.filter((items, i) => {
curr = {
initial: "", //字母
data: [], //数据
};
arr.map((v, index) => {
if (!v.nickname) return;
// 特殊字符
if (pattern.test(v?.nickname[0])) {
if ((!zh[i - 1] || zh[i - 1].localeCompare(v?.nickname) <= 0) && v?.nickname.localeCompare(zh[i]) == -1) {
curr.data.push(v);
}
}
// 判断首个字是否是中文
if (re.test(v?.nickname[0])) {
// 英文
if (v?.nickname[0].toUpperCase() == items) {
curr.data.push(v);
}
} else {
// 中文
if ((!zh[i - 1] || zh[i - 1].localeCompare(v?.nickname) <= 0) && v?.nickname.localeCompare(zh[i]) == -1) {
curr.data.push(v);
}
}
});
if (curr.data.length) {
curr.initial = letters[i];
segs.push(curr);
curr.data.sort((a: any, b: any) => {
return a.nickname.localeCompare(b.nickname);
});
}
});
res.segs = Array.from(new Set(segs)); //去重
console.log(res.segs, res);
const lastData = res.segs.shift();
debugger
if (lastData.initial == "#") {
res.segs.push(lastData);
}else{
res.segs.unshift(lastData);
}
return res;
};