如何从最后一项开始以相反的方向从数组中发出值?
How to emit values from an array in the opposite direction starting from the last item?
这是我所在的位置:
const observer = (item) => {
console.log(item);
}
Observable.from([1,2,3,4,5])
.take(3)
.*******
.subscribe(observer);
我想在控制台中得到的是:
5
4
3
要获得该输出,您可以使用 toArray
和 mergeMap
,但您需要在 take(3)
:
之前组合它们
Rx.Observable.from([1, 2, 3, 4, 5])
.toArray()
.mergeMap(array => array.reverse())
.take(3)
.subscribe(value => console.log(value));
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>
如果您有一个 Observable 在它完成之前发出相对较少的值,那么这将很好地工作。如果你有一个 observable 发出任意数量的值并且你只想要最后三个 - 以相反的顺序 - 你可以使用 reduce
来避免必须缓冲每个发出的值:
Rx.Observable.from([1, 2, 3, 4, 5])
.reduce((acc, value) => {
acc.unshift(value);
if (acc.length > 3) {
acc.pop();
}
return acc;
}, [])
.mergeAll()
.subscribe(value => console.log(value));
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>
这是我所在的位置:
const observer = (item) => {
console.log(item);
}
Observable.from([1,2,3,4,5])
.take(3)
.*******
.subscribe(observer);
我想在控制台中得到的是:
5
4
3
要获得该输出,您可以使用 toArray
和 mergeMap
,但您需要在 take(3)
:
Rx.Observable.from([1, 2, 3, 4, 5])
.toArray()
.mergeMap(array => array.reverse())
.take(3)
.subscribe(value => console.log(value));
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>
如果您有一个 Observable 在它完成之前发出相对较少的值,那么这将很好地工作。如果你有一个 observable 发出任意数量的值并且你只想要最后三个 - 以相反的顺序 - 你可以使用 reduce
来避免必须缓冲每个发出的值:
Rx.Observable.from([1, 2, 3, 4, 5])
.reduce((acc, value) => {
acc.unshift(value);
if (acc.length > 3) {
acc.pop();
}
return acc;
}, [])
.mergeAll()
.subscribe(value => console.log(value));
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>