[英]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.