1.单个属性的排序
// 排序规则: 数字开头优先级最高、字母开头优先级第二、中文开头优先级第三、特殊符号开头优先级第四
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];
};
2.多种属性的排序;
var data=[
{year:1999,month:10},
{year:2000,month:6},
{year:2000,month:10},
{year:1999,month:6}]
function compare(property1,property2) {
return function (obj1, obj2) {
var year1 = obj1[property1];
var year2 = obj2[property1];
var month1= obj1[property2];
var month2= obj2[property2];
if(year1-year2==0){
return month1 -month2;// 月份升序
}else{
return year1 -year2; // 年份升序
}
};
}
var newData = data.sort(compare("year","month"));