Home > Blockchain >  Subscribe to an observable and put values into an array
Subscribe to an observable and put values into an array

Time:05-11

I'm new in angular and I need some help. I have an observable getting users of type User[]

User: [
id: string,
name: string
]

and I have another array Ids of type string getting the ids of the selected users from a mat-select

 Ids = this.Form.controls['users'].value

what I need right now is to subscribe to users$ observable, and get only the users that they have an id in Ids

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

something like the above but it is not really the right thing to do because it returns undefined . I'm wondering how should I properly get my selectedUsers array.

CodePudding user response:

You use combineLatest to merge both observables and map all elements to accomplish it.

First, Create an observable with ids.

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

Next, combine both observables, using the combineLatest operator, and return the players using the map to iterate over the response from the combineLast, use the filter and find to match the playerid with the ids from the selectedIds array.

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);
          });
  • Related