Снизить положение уже отсортированных объектов в массиве JavaScript - PullRequest
0 голосов
/ 08 апреля 2019

Я создал функцию сортировки, которая может сортировать объекты внутри. Теперь я хочу разрешить пользователю инвертировать сортировку, если она уже отсортирована по требуемому значению, но я не могу заставить ее работать. Любая помощь будет оценена

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 голосов
/ 08 апреля 2019

У вас есть два решения.

Первое (грязное): просто сортируйте и .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();

Так что каждый раз, когда это будетбыть отсортирован и перевернут.После сортировки по возрастанию она будет снова отсортирована (без изменений) и перевернута (с изменениями).Еще одно изменение, другая сортировка (без изменений) и другое обратное (изменение).

Второе (лучше): запомните порядок последней сортировки (asc / desc) и в зависимости от этого значенияизменить значение с -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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...