Rxjs/Typescript:尝试在数组交叉点上过滤流
具有一个流,其中该对象包含字符串和字符串数组。我有一个过滤器,它是另一个字符串数组。过滤器应仅发出阵列交点不为空的项目 这是我想做的psuedo代码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 (
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]));