[英]rxjs5 - filtering array of objects by observable that each object contains
我有一個看起來像這樣的數組
[
{
name: 'foo'
filter: Observable.of(true)
},
{
name: 'bar'
filter: Observable.of(false)
}
]
並且我只想返回filter
為真的項目,我該如何以最有效和反應最快的方式來做呢? 我正在使用rxjs5 beta2。
請注意,為簡單起見,它是一個偽代碼,在我的實際情況下,過濾器實際上是一個對象,該對象傳遞給驗證函數,該函數返回一個可分辨為true
或false
的observable。
您可以將數組中的每個項目平面映射到一個Observable流,該流將發出該項目的版本,該版本將類型為Observable<bool>
的filter
屬性替換為bool
屬性。
const data$ = Rx.Observable.from(arr)
// Convert each item's filter property to type bool
.flatMap(x => x.filter.map(condition => Object.assign({}, x, { filter: condition })))
// Now we can just filter over the filter property, which is of type bool.
.filter(x => x.filter)
// Each item emitted will have a filter value of true
.subscribe(x => console.log(x));
RxJS 4中有兩件事使此操作變得容易:map和Rx.helpers.defaultComparer。 第一個地圖分別從iterable發送每個項目,並且defaultComparer將為您進行深度檢查。
var comparer = Rx.helpers.defaultComparer;
const Observable = Rx.Observable;
const arr = [
{
name: 'foo',
filter: Observable.of(true)
},
{
name: 'bar',
filter: Observable.of(false)
}
];
const data$ = Observable.from(arr)
.map(each => each)
.filter(each => comparer(each.filter, Observable.of(true)))
.subscribe(x => console.log(x));
// prints Object {name: "foo", filter: FromArrayObservable} to my console
由於某種原因,這個defaultComparer目前不在五分之內。 也許為helper改了個新名稱,因為它沒有在4中被棄用,或者可能尚未遷移或不在.helpers上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.