Rxjs/Typescript:尝试在数组交叉点上过滤流

Rxjs/Typescript:尝试在数组交叉点上过滤流,rxjs,observable,typescript2.0,Rxjs,Observable,Typescript2.0,具有一个流,其中该对象包含字符串和字符串数组。我有一个过滤器,它是另一个字符串数组。过滤器应仅发出阵列交点不为空的项目 这是我想做的psuedo代码 genreFilter: string["poetry", "fiction"] this.books$ = this.bookInventoryService.getBooks() .filter(book => { for( let genre of genreFilter) { if (

具有一个流,其中该对象包含字符串和字符串数组。我有一个过滤器,它是另一个字符串数组。过滤器应仅发出阵列交点不为空的项目

这是我想做的psuedo代码

genreFilter: string["poetry", "fiction"]

this.books$ = this.bookInventoryService.getBooks()
    .filter(book => {
        for( let genre of genreFilter) {
            if (book.genres.contains(genre) {
                return true;
            }
        }
    });

有没有一种方法可以进行数组相交?

这不是一个真正的Rx问题,但是如果您正在编译到ES6,您可以从过滤器中创建一个
集,然后使用数组#some来确定是否有任何相交

const genreFilter: Set<string> = new Set(["poetry", "fiction"]);

this.books$ = this.bookInventoryService.getBooks()
    .filter(book => book.genres.some(genre => genreFilter.has(genre)));

bookInventoryService.getBooks()
返回一个
可观察的
,因此lambda'this.books$=`
this.bookInventoryService.getBooks()
.filter(book=>book.genres
似乎不起作用,因为它说
book
是一本
book[]
不是一个单独的
book
对象。我需要书上的
foreach
吗?你不需要,你只需要展平books数组:
bookInventoryService.getBooks().flatMap(books=>books.filter(/**/)
   const genreFilter = ["poetry", "fiction"]
      .reduce((obj, key) => {
        obj[key] = true 
        return obj;
      }, {});

   this.books$ = this.bookInventoryService.getBooks()
        .filter(book => book.genres.some(genre => genreFilter[genre]));