降序排列已排序对象在JavaScript数组中的位置

时间:2019-04-08 19:17:53

标签: javascript sorting

我创建了一个排序功能,可以对可能数组中的对象进行排序。现在,我想使用户能够对排序进行逆运算(如果它已经按想要的值进行排序),但是我无法使其工作。 任何帮助将不胜感激

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;

1 个答案:

答案 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变量的最后一个值来更改排序的顺序;