Как назначить отсортированные данные неизменяемому объекту - PullRequest
0 голосов
/ 01 июля 2019

Я получаю данные от ngrx/store, эти данные отсортированы во внешнем интерфейсе. когда данные отсортированы, я возвращаю значение, но обновления не происходит. Я понял, что данные immutable. Но как присвоить значение обратно immutable?

вот моя попытка: this.data - не обновляется после сортировки.

this.data = this.data.slice().sort((a, b) => {
  if (this.sort) {
    if (isNaN(a)) {
      if (a[sortBy] < b[sortBy]) {
        return -1;
      }
    }
    if (!isNaN(a)) {
      return a[sortBy] - b[sortBy];
    }
  }
  if (!this.sort) {
    if (isNaN(a)) {
      if (b[sortBy] < a[sortBy]) {
        return -1;
      }
    }
    if (!isNaN(a)) {
      return b[sortBy] - a[sortBy];
    }
  }
});

1 Ответ

1 голос
/ 01 июля 2019

В таких сценариях вы можете использовать sortBy Pipe.Ниже приведен код, который поможет вам.Приведенный ниже код может обрабатывать массивы numbers, string, objects. Вы можете передать ключ, к которому необходимо применить сортировку.Также вы можете сортировать в обратном порядке, если требуется.

Также таким образом вам не нужно изменять ваши данные и переназначать.Труба и угол будут заботиться о сортировке на основе переданных входов, и то же самое будет отображаться в пользовательском интерфейсе.И вы можете использовать этот канал в своем коде.

import {
  Pipe,
  PipeTransform
} from "@angular/core";

@Pipe({
  name: "sortBy"
})
export class ArraySortByPipe implements PipeTransform {
  public transform(array: any[], reverse: boolean = false, prop ? : string) {
    if (!Array.isArray(array)) {
      return array;
    }
    if (array.length) {
      let sortedArray: any[];
      if (typeof array[0] === "string") {
        sortedArray = array.sort();
      }
      if (typeof array[0] === "number") {
        sortedArray = array.sort((a, b) => a - b);
      }
      if (typeof array[0] === "object" && prop) {
        sortedArray = array.sort((a, b) => a[prop].toString().localeCompare(b[prop].toString()));
      }
      return !reverse ? sortedArray : sortedArray.reverse();
    }
    return array;
  }
}

Надеюсь, это поможет :).Дайте мне знать, если у вас все еще есть проблемы.

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