JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.3/Rx.js"></script>
JavaScript
var Observable = Rx.Observable;
var swapFirstWithLast = array => {
var x = array[0];
array[0] = array[array.length-1];
array[array.length-1] = x;
return array;
}
var values$ = Observable.interval(1000); //.. 0 .. 1 .. 2 .. 3 .. 4 .. 5 ..
var index = 2;
var newIndex = 4;
var windowFrames$ = values$.filter((_,i) => i === index-1 || i === newIndex);
var swapValues$ = values$
.window(windowFrames$)
.switchMap((frame$, i) =>
i === 1 ? // the frame index between index-1 and newIndex
frame$.toArray().flatMap(x => Observable.from(swapFirstWithLast(x))) :
frame$);
swapValues$.subscribe(console.log);