Использование отличного с наблюдаемым - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь отфильтровать дубликаты с помощью .distinct () в моей наблюдаемой, но она ничего не делает, и у меня нет ошибок ....

    this.settingsService.getGuruQueries().subscribe(queries => { 
of<any>(queries).pipe(distinct((p: any) => p['book']), ).subscribe(x => console.log(x));

Мои дубликаты отображения на console.log:

{book: "XBIL", grid: "NATGRI", concept: "STT_XBIL", query: "XBIL_NATGRI", customer: "A", …}
{book: "XBIL", grid: "IT-ANY", concept: "STT_XBIL", query: "XBIL_IT-ANY", customer: "A", …}
{book: "IBIL", grid: "NATGRI", concept: "STT_IBIL", query: "IBIL_NATGRI", customer: "A", …}
{book: "IMIL", grid: "IT-ANY", concept: "STT_IMIL", query: "IMIL_IT-ANY", customer: "A", …}
{book: "IDAFR", grid: "RTE", concept: "STT_IDAFR", query: "IDAFR_RTE", customer: "A", …}
{book: "IDCOM", grid: "RTE", concept: "STT_XFIL", query: "XFIL_RTE", customer: "A", …} ...

Есть идеи почему?

Ответы [ 2 ]

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

Я предполагаю, что вы не передаете значения по отдельности, но все сразу.

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

Observable distinct

distinct хочет массив выданных значений, а не одно значение.Я думаю, что-то вроде этого будет работать для вас (при условии, много на вашем компоненте):

this.settingsService.getGuruQueries().subscribe(queries => { 
  from<any>(queries).pipe(distinct((p: any) => p['book']), ).subscribe(x => console.log(x));

Обратите внимание, что я использовал from вместо вашего of.

Отдельные элементы массива

Альтернативой может быть обычная фильтрация уникальных значений из массива книг, при этом нет необходимости в наблюдаемых там значениях:

this.settingsService.getGuruQueries().pipe(map(queries => Array.from(new Set(queries ))))
.subscribe();

См. Примеры здесь .


Примечание: вы вкладываете подписки в вашем примере.Вы можете избежать этого, используя pipe/map там (игнорируйте тот факт, что пример не работает):

this.settingsService.getGuruQueries()
    .pipe(
         map(queries =>  
              of<any>(queries).pipe(distinct((p: any) => p['book']))
    )
    .subscribe(x => console.log(x));
0 голосов
/ 04 декабря 2018

Вы не упоминаете, какую версию Angular / Rxjs вы используете.Итак, если предположить, что * * * * * * * * * * * * * * * * * * существует в используемой вами версии, проблема заключается в том, что, когда вы делаете разные, вы бы проверяли, что наблюдаемое отличается, то есть, если новое наблюдаемое значение такое же, как и старое, точно такое же, не испускайте ничего,Основная концепция объясняется здесь .

То, что вы хотите сделать, - это на самом деле базовое удаление дубликатов из фактического объекта массива.Для этого вам нужно будет написать собственную логику.

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