我创建了一个排序功能,可以对可能数组中的对象进行排序。现在,我想使用户能够对排序进行逆运算(如果它已经按想要的值进行排序),但是我无法使其工作。 任何帮助将不胜感激
case 'fileName':
this.contractList.sort((a, b) => {
const nameA = a.filename.toUpperCase();
const nameB = b.filename.toUpperCase();
if (nameA < nameB) {
return this.sortedValue === 'fileName' ? -1 : 1;
}
if (nameA > nameB) {
return this.sortedValue !== 'fileName' ? 1 : -1;
}
return 0;
});
this.sortedValue = 'fileName';
break;
答案 0 :(得分:0)
您有两种解决方案。
第一(肮脏):每次只需对数组进行排序和.reverse()
:
this.contractList.sort((a, b) => {
const nameA = a.filename.toUpperCase();
const nameB = b.filename.toUpperCase();
if (nameA < nameB) {
return this.sortedValue === 'fileName' ? -1 : 1;
}
if (nameA > nameB) {
return this.sortedValue !== 'fileName' ? 1 : -1;
}
return 0;
})
.reverse();
因此,每次都会对其进行排序和反转。升序排序后,将再次排序(无更改)并反转(更改)。另一个变化,另一种变化(没有变化)和另一个反向变化(变化)。
第二(更好):记住上一次排序的顺序(升序/降序),并根据此值将值从-1
更改为1
:>
const newSorting = this.lastSortingOrder === 'asc' ? 1 : -1;
this.lastSortingOrder = this.lastSortingOrder === 'asc' ? 'desc' : 'asc';
this.contractList.sort((a, b) => {
const nameA = a.filename.toUpperCase();
const nameB = b.filename.toUpperCase();
if (nameA < nameB) {
return this.sortedValue === 'fileName' ? -1 * newSorting : newSorting;
}
if (nameA > nameB) {
return this.sortedValue !== 'fileName' ? newSorting : -1 * newSorting;
}
return 0;
});
这将根据this.lastSortingOrder
变量的最后一个值来更改排序的顺序;