簡體   English   中英

map 兩個 Oberservable arrays 如何基於一個值?

[英]How to map two Oberservable arrays based on a value?

我有兩個可觀察的 arrays。

habits$: Observable<Habit[]>;
status$: Observable<Status[]>;

該習慣具有以下結構:

export interface Habit {
  habitId: number;
  name: string;
  repeatVal: number;
  notification: string;
  color: string;
  question: string;
  id: number;
}

狀態數組有 habitId、日期和狀態作為鍵。

我想根據兩者中存在的habitId 屬性將habits$ 和status$ 合並到一個Observable 數組中。

我已經做了一些研究,mergeMap() 和 forkJoin() 的組合似乎是通往 go 的方法,如下所示將多個可觀察的 arrays 組合成新的 ZA8CFDE6331BD59EB2AC96F8911C4B6 數組

但我想不出適合我的語法。

這就是我的代碼目前的樣子:

ngOnInit() {
this.habits$ = this.habitService.fetchAllById(this.authService.userId);
console.log(this.habits$);
this.status$ = this.statusService.fetchAll();
this.habits$.pipe(
  mergeMap(habits => {
  this.status$ = this.statusService.fetchAll().filter(status => status.habitId == habits.habitId);
}));
console.log(this.joined$);}

我會以下列方式使用 forkJoin:

ngOnInit() {
  forkJoin([
    this.habitService.fetchAllById(this.authService.userId),
    this.status$ = this.statusService.fetchAll()
  ]).subscribe(([habits, statuses]) => {
    this.joined = habits.map(habit => ({
      ...statuses.find(t => t.habitId === habit.habitId),
      ...habit 
    }));
  });
}

看簡單的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM