首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象数据过滤的Rxjs数组

对象数据过滤的Rxjs数组
EN

Stack Overflow用户
提问于 2017-01-12 23:59:28
回答 1查看 277关注 0票数 0

我正在尝试使用selectedProject activities: Activity[]过滤ngrx状态。selectedProject的密钥是用来获得可观察到的[{$key, true}, ...]的。如何过滤activities: Activity[]状态呢?对于曾经使用过rxjs的人来说,这可能是一个非常简单的问题。

代码语言:javascript
复制
let obs: Observable<Project> = this.appstore.select('selectedProject');
let actskeys: FirebaseListObservable<any[]>;
    obs.subscribe(val => 
      {
        id = val.$key;
        actskeys = this.db.list(`/projectActs/${id}`);// This returns [{$key: true},{$key: true},...]
        this.appstore.select('activities'); // I want to filter this store using the actkeys, $key.
                }
    );

我的try非工作代码

代码语言:javascript
复制
 getActsByCourseId(): Observable<Activity[]>{
    let id: string;
    let actskeys: FirebaseListObservable<any[]>;
    let obs: Observable<Project> = this.appstore.select('selectedProject');
    let acts = this.appstore.select('activities')
    let filteredActs: Activity[] = [];
    obs.subscribe(val => 
                {
                    id = val.$key;
                    actskeys = this.db.list(`/projectActs/${id}`);
                    actskeys.subscribe(val => {val.forEach(bb => 
                        acts
                        .filter((res: Activity[]) => res && res.length > 0 )
                        .map((res: Activity[]) => res.filter(val => val.$key === bb.$key))
                        .subscribe(res => console.log(res))
                        );
                        this.appstore.dispatch({ type: LOAD_Activities, payload: filteredActs});                         
                    }
                    )                      
                }
    );
    return this.appstore.select('activities');
}

更新代码:我已经尝试过combineLatest

代码语言:javascript
复制
let selectedProject$ = this.appstore.select<Project>('selectedProject');
    let activities$ = this.appstore.select<Activity[]>('activities');
    let actskeys$: FirebaseListObservable<any[]>;
    let filteredActs: Observable<any[]> ;
    selectedProject$
        //.withLatestFrom(actskeys$, activities$)
            .map((selectedProject) => {
                    id = selectedProject.$key;
                    return actskeys$ = this.db.list(`/projectActs/${id}`);
    // filter here your activities ...
   })
   .subscribe(res => {
     filteredActs = this.getProjectActs(res);
   });
   filteredActs.subscribe(
                        res => {
                        console.log(res);
                        //  this.appstore.dispatch({ type: LOAD_Activities,     
                            payload: res});
                         }
                     );
    return this.appstore.select('activities');
    }

    getProjectActs(actskeys$:FirebaseListObservable<any[]>):   
    Observable<any[]> {
    let activities$ = this.appstore.select<Activity[]>('activities');
    return  Observable.combineLatest(activities$, actskeys$, (acts, keys) =>    
                        {
                         return keys.map(key => {
                             acts.filter(act => act.$key === key.$key);
                        })
                    })
    };

我正在从控制台获取[undefined, undefined]

EN

回答 1

Stack Overflow用户

发布于 2017-01-13 05:40:35

不能完全理解你在做什么,但你可以试一试:

代码语言:javascript
复制
let selectedProject$ = this.appstore.select<Project>('selectedProject');
let activities$ = this.appstore.select<Activities>('activities');
let actskeys$: FirebaseListObservable<any[]>;

selectedProject$
    .withLatestFrom(actskeys$, activities$)
    .map([selectedProject, actskeys, activities] => {
        id = selectedProject.$key;
        actskeys = this.db.list(`/projectActs/${id}`);

        // filter here your activities ...
    })
    .subscribe();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41617690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档