Demo: partition
The partition operator segregates the data from a given observable into an array of two observables as given by the boolean partition condition.
const [truePart, falsePart] = partition(
sourceObservable,
(value) => booleanCondition);
let input = from(
partition(// returns an array
timer(500,2000).pipe(take(6)),//sourceObservable
((v:number) => v%2===0) //partition predicate
));
//Collect the items in separate arrays
//and print as we add new items
let process = mergeMap((v:any)=>
v.pipe(scan((acc,v)=>[...acc,v], [])));
let output=input.pipe(process).subscribe(v=>console.log(v))