Как использовать какой-то фильтр вместе с исходным объектом восстановления? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть массив объектов this.fltUsers.

Ниже я прослушиваю входящие сообщения и выполняю фильтрацию this.fltUsers.

this.filterForm.controls["gender"].valueChanges.subscribe(selectedValue => {
      this.requestLoadPersonal = this.fltUsers.filter((p: Personal) => {
        return selectedValue ? p.gender == selectedValue : true;
      });
    });

    this.filterForm.controls["position"].valueChanges.subscribe(
      selectedValue => {
        this.requestLoadPersonal = this.fltUsers.filter((p: Personal) => {
          return selectedValue ? p.positionId == selectedValue : true;
        });
      }
    );

Где this.requestLoadPersonal содержит отфильтрованные данные.

Как передать результат первой фильтрации второму?Сделать условие AND между двумя filters?Как восстановить исходный объект?

Возможно, я могу использовать замену, например:

if (this.requestLoadPersonal !== this.fltUsers) {
    // FILTER BY this.requestLoadPersonal
} else {
   // FILTER BY this.fltUsers
}

Кажется, я должен сохранять оператор объекта каждый раз перед изменением, затем я могу восстановить его до предыдущего оператора.

1 Ответ

0 голосов
/ 07 декабря 2018

Я предполагаю, что вы используете rxjs.В этом случае вы можете использовать операторы rxjs.Может быть, посмотрите на документацию здесь .

В вашем случае это может сделать это:

const firstCondition = this.filterForm.controls["gender"].valueChanges.pipe(map(selectedValue => {
  this.fltUsers.filter((p: Personal) => p.gender == selectedValue);
}));

const secondCondition = this.filterForm.controls["position"].valueChanges.pipe(map(
  selectedValue => {
    this.fltUsers.filter((p: Personal) => p.positionId == selectedValue);
  }));

merge(firstCondition, secondCondition).pipe(reduce((acc, val) => acc && val), true);

Я сопоставляю обе наблюдаемые с вашим состоянием (pipeи map).Затем я могу использовать merge для создания одного наблюдаемого потока, который содержит оба значения, и reduce в конце для одного логического значения.

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