我可以使用 rxjs 针对 id 的字符串数组过滤 Observable

Posted

技术标签:

【中文标题】我可以使用 rxjs 针对 id 的字符串数组过滤 Observable【英文标题】:Can I use rxjs to filter an Observable against a string array of id's 【发布时间】:2019-10-07 20:59:32 【问题描述】:

我正在为 Angular 应用程序设置访问控制,并像这样对我的用户对象进行建模: -用户 - 名 - 电话号码 --posts[]

getPosts(): Observable<any[]> 
    return this.postsCollection.snapshotChanges().pipe(
      map((actions) => 
        return actions.map((a) => 
          const data = a.payload.doc.data();
          const data2 =  id: a.payload.doc.id, ...data;
          this.hasPostAccess(data2);
          return  id: a.payload.doc.id, ...data;
        );
      )
    );
  

  private hasPostAccess(data: any) 
    const inspect = obj => 
      for (const prop in obj) 
        if (obj.hasOwnProperty(prop)) 
          // console.log(`$prop: $obj[prop]`);
          if (prop === 'id') 
            console.log(obj[prop]);
            const PostId = obj[prop];
            const currentUser = JSON.stringify(localStorage.getItem('user'));
            if (currentUser.search(PostId) === -1) 
              console.log('Denied: ' + PostId);
             else 
              console.log('Allowed: ' + PostId);
            
            console.log('Current USER: ' + JSON.stringify(currentUser));
            // if (currentUser(PostId) > -1) 
            //   console.log('Allowed: ' + PostId);
            //  else 
            //   console.log('Denied: ' + PostId);
            // 
          
        
      
    ;
    inspect(data);
  

我想显示属于该用户的所有帖子。因此,当我订阅 getPosts Observable 时,它​​必须过滤帖子并仅返回存储在用户帖子数组中的帖子 ID。

【问题讨论】:

问题出在哪里?你期待我们为你做你的工作吗? How to ask 不,迈克,只是想知道如何在不使用道具检查的情况下使用 Observable 完成此操作。我是 rxjs 的新手。 :) rxjs-dev.firebaseapp.com/api/operators/filter 谢谢@penleychan 【参考方案1】:
getPosts(): Observable<any[]> 
    const currentUser: User = JSON.parse(localStorage.getItem('user'));
    const userPosts  = currentUser.posts;
    return this.postsCollection.snapshotChanges().pipe(
      map((actions) => 
        return actions.map((a) => 
          const data =  id: a.payload.doc.id, ...data;
          const filteredPosts = _.filter(data, (p) => 
          _.includes(currentUser, p.postId));
          return filteredPosts;
        );
      )
    );
  

【讨论】:

以上是关于我可以使用 rxjs 针对 id 的字符串数组过滤 Observable的主要内容,如果未能解决你的问题,请参考以下文章

RxJs Observable:如果为空/过滤则执行函数

带有 RxJS 过滤器输入问题的 Typescript

角度过滤器 Observable 数组

使用带有过滤器(布尔)的 RxJS 进行查询?

RxJs - 将Observables数组转换为发射值数组

Rxjs 过滤器运算符不适用于 Angular2 Observable