示例数据
data() {
return {
tableData: [
{
date: "2016-05-02",
num: 99,
address: "上海市",
},
{
date: "2016-05-04",
num: 88,
address: "北京市",
},
{
date: "2016-06-03",
num: 8,
address: "B市",
},
{
date: "2016-08-06",
num: "45",
address: "6市",
},
{
date: "2016-02-03",
num: 58,
address: "厦门市",
},
{
date: "2016-01-03",
num: "23",
address: "A市",
},
{
date: "2016-05-06",
num: 45,
address: "a市",
},
{
date: "2016-07-06",
num: 45,
address: "8市",
},
{
date: "2016-06-06",
num: 45,
address: "1市",
},
{
date: "2016-05-01",
num: 66,
address: "深圳市",
},
{
date: "2016-05-07",
num: "55",
address: "成都市",
},
{
date: "2016-03-03",
num: "12",
address: "b市",
},
{
date: "2016-08-09",
num: 99,
address: "F市",
},
{
date: "2016-07-03",
num: 55,
address: "f市",
},
],
};
},
1.按日期升序/按日期降序
dateSort(sortType) {
// 升序
// a.date,b.date 日期
if (sortType == "升序") {
this.tableData.sort((a, b) => new Date(a.date) - new Date(b.date));
}
// 降序
if (sortType == "降序") {
this.tableData.sort((a, b) => new Date(b.date) - new Date(a.date));
}
},
2.数量升序和降序排序
numSort(sortType) {
// 升序 a.num,b.num数量
if (sortType == "升序") {
this.tableData.sort((a, b) => {
const numA = parseInt(a.num);
const numB = parseInt(b.num);
if (numA < numB) {
return -1;
}
if (numA > numB) {
return 1;
}
return 0;
});
}
// 降序
if (sortType == "降序") {
this.tableData.sort((a, b) => {
const numA = parseInt(a.num);
const numB = parseInt(b.num);
if (numA > numB) {
return -1;
}
if (numA < numB) {
return 1;
}
return 0;
});
}
},
3.中文排序(按照数字、中文、英文的顺序进行排序)
stringSort() {
// 按照数字、中文、英文的顺序进行排序
this.tableData.sort((a, b) => {
const regNum = /^[0-9]*$/;
const regChinese = /^[\u4e00-\u9fa5]*$/;
const partsA = a.address//地址
.split(/(\d+)|([\u4e00-\u9fa5]+)|(\w+)/)
.filter(Boolean);
const partsB = b.address//地址
.split(/(\d+)|([\u4e00-\u9fa5]+)|(\w+)/)
.filter(Boolean);
for (let i = 0; i < Math.min(partsA.length, partsB.length); i++) {
let partA = partsA[i];
let partB = partsB[i];
if (partA !== partB) {
if (regNum.test(partA) && regNum.test(partB)) {
return parseInt(partA) - parseInt(partB);
} else if (regChinese.test(partA) && regChinese.test(partB)) {
return partA.localeCompare(partB, "zh-Hans-CN", {
sensitivity: "accent",
});
} else {
return partA.localeCompare(partB);
}
}
}
return partsA.length - partsB.length;
});
},