// 1.数字、2.字母、3.中文、4.特殊符号
export const sortFn = (_data, name) => {
const data = (_data ?? []).map((_) => ({ ..._, [name]: _[name] ?? '' }));
let allArr = [];
/**1.数字开头类 */
let reg1 = new RegExp('[0-9]+');
let rankArr = data.filter((ele, index) => {
return reg1.test(ele[name].substr(0, 1));
});
rankArr = rankArr.sort((a, b) => {
return a[name].substr(0, 1) - b[name].substr(0, 1);
});
/**2.字母开头类*/
let reg3 = new RegExp('^[a-zA-Z]');
let wordArr = data.filter((ele, index) => {
return reg3.test(ele[name].substr(0, 1));
});
wordArr = wordArr.sort(function (s, t) {
let a = s[name].substr(0, 1).toLowerCase();
let b = t[name].substr(0, 1).toLowerCase();
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
/**3.汉字开头类*/
let reg2 = new RegExp('^[\u4e00-\u9fa5]');
let chineseArr = data.filter((ele, index) => {
return reg2.test(ele[name].substr(0, 1));
});
chineseArr = chineseArr.sort((a, b) => {
return a[name].localeCompare(b[name]);
});
/**4.剩余其他的开头*/
let otherArr = data.filter((ele, index) => {
return (
!reg1.test(ele[name].substr(0, 1)) &&
!reg2.test(ele[name].substr(0, 1)) &&
!reg3.test(ele[name].substr(0, 1))
);
});
// otherArr = otherArr.sort((a, b) => {
// return a[name].localeCompare(b[name]);
// });
allArr = [].concat(rankArr, wordArr, chineseArr, otherArr);
return [...allArr];
};
02-22