我是Rxjs的新手,我想知道这个问题是否可以解决。
给定一个5个可观察数组,每个都已经发出了如下数据:
ary [0]:{'a','b','c'}
ary [1]:{'g',null}
ary [2]:{'1','f','3',null}
ary [3]:{'x','y','z'}
ary [4]:{'h','v'}
我想有一个新的observable,用于计算这5个observable的非null最后元素的值。在上面的例子中,新的observable发出的第一个值是3(c,z,v)。
每当从其中一个observable发出新数据时,新的observable也会发出计数结果。例如,
时ary [4]:{'h','v'}变为
ary [4]:{'h','v',null}
新的observable将发出2(c,z)。
答案 0 :(得分:1)
您可以将combineLatest
与后续map
:
const baseObs = [
new Rx.Subject(),
new Rx.Subject(),
new Rx.Subject(),
new Rx.Subject(),
new Rx.Subject(),
]
const counter$ = Rx.Observable
.combineLatest(baseObs)
.map(dataList => dataList.filter(d => d != null).length);
counter$.subscribe(
num => console.log(`Num is ${num}`)
);
baseObs[0].next("a");
baseObs[1].next(null);
baseObs[2].next(null);
baseObs[3].next("z");
baseObs[4].next("v");
setTimeout(() => baseObs[4].next(null), 300);

<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
&#13;