订阅一个可观察对象并将值放入数组中

Subscribe to an observable and put values into an array

我是 angular 的新人,我需要一些帮助。 我有一个可观察到的用户类型为 User[]

User: [
id: string,
name: string
]

我还有另一个字符串类型的 ID 数组,从 mat-select

中获取 selected 用户的 ID
 Ids = this.Form.controls['users'].value

我现在需要的是订阅 users$ observable,并且只获取在 IDs 中有 id 的用户

 const selectedUsers = ids.forEach(id =>this.usersSub$.value.filter((user) => user.userId === id))

类似于上面的内容,但这并不是真正正确的做法,因为它 returns 未定义。我想知道我应该如何正确获取我的 selectedUsers 数组。

您使用 combineLatest 合并两个可观察对象并映射所有元素来完成它。

首先,创建一个带有 id 的可观察对象。

selectedIds$ = of([1, 3]);
  players$ = of([
    { id: 1, name: 'lebron' },
    { id: 2, name: 'irving' },
    { id: 3, name: 'love' },
  ]);

接下来,使用 combineLatest 运算符组合两个可观察对象,return 玩家使用地图迭代 combineLast 的响应,使用过滤器并找到与 playerid 匹配的来自 selectedIds 数组的 ID。

const seletedUsers$ = combineLatest([this.selectedIds$, 
     this.players$])
          .pipe(
            map(([ids, players]) => {
              return players.filter((p) => ids.find((id) => id === p.id));
            })
          )
          .subscribe((v) => {
            console.log(v);
          });