2016-11-13 2 views
0

Я пытаюсь изменить, а затем отсортировать список. Я полностью нуб в этом :(Как отсортировать наблюдаемые параметры с наблюдаемыми параметрами? rxjs

я был в состоянии сделать это с «combineLatest», но проблема в том, что я всегда изменить массив с помощью функции ниже «groupByDateAndTournament» Мой результат:.

  1. создать наблюдаемые из списка и параметры сортировки (favoriteTournaments, teamRanks)
  2. изменяющего список с «groupByAndTournament» только если наблюдаемый список изменился
  3. рода любимец, только если obsevable favoriteTournament изменилось
  4. сортировать по рангам, только если наблюдаемая teamRank изменилась

    this.subscription = 
        this.matchesService.getUpcoming() 
        .merge(
        this.favoriteService.getFavoriteTournaments().flatMap((data) => { 
         return {'favoriteTournaments': data} 
        }), 
        this.teamsService.getTeamRanking().flatMap((data) => { 
         return {'teamRanks': data} 
        }) 
    
    ).scan((acc, curr) => { 
        let upcomingMatches; 
        if (curr.upcoming) { 
         upcomingMatches = this.groupByDateAndTournament(curr); 
        } 
        if (curr.favoriteTournaments) { 
         upcomingMatches = this.sortByFavorite(curr) 
        } 
    
        if (curr.teamRanks) { 
         upcomingMatches = this.sortByRank(curr); 
        } 
        return upcomingMatches; 
    
    }) 
        .subscribe() 
    
+0

Почему вы не используете простой старый Array.sort (...) '? Трудно понять, что должен делать этот код ... – martin

ответ

0

Так мне это удалось с combineLatest

Observable.combineLatest(
     this.matchesService.getUpcoming().map((data)=> this.upcomingService.combineUpcomings(data)), 
     this.favoriteService.getFavoriteTournaments(), 
     this.teamsService.getTeamRanking(), 
     (matches, favoriteTournaments, teamRanks) => this.upcomingService.prepareUpcomingMatches(matches, favoriteTournaments, teamRanks) 
    ).subscribe((data)=> 
     this.ngZone.run(() => { 
      this.upcomingMatches = data; 
      this.loading = false; 
     }) 
    ); 

Он по-прежнему имеет проблемы. PrepareUpcomingMatches функция запускается при изменении любого из наблюдаемых.

Смежные вопросы