Javascript 在Rxjs 6中以数组形式发出以前的值?
我需要一个可观测的,发射一个数组的先前值高达X个值 基本上,除了我希望它立即发出并保持一个运行的历史记录之外,还有一些类似的东西Javascript 在Rxjs 6中以数组形式发出以前的值?,javascript,angular,rxjs,rxjs6,Javascript,Angular,Rxjs,Rxjs6,我需要一个可观测的,发射一个数组的先前值高达X个值 基本上,除了我希望它立即发出并保持一个运行的历史记录之外,还有一些类似的东西 of(1,2,3,4,5,6,7,8,9).管道( bufferHistory(3)//console.log(v)); //开始 // [1] // [2,1] // [3,2,1] // [4,3,2] // [5,4,3] // [6,5,4] // [7,6,5] // [8,7,6] // [9,8,7] //竞争 我找不到Rxjs 6的运算符来执行此操作
of(1,2,3,4,5,6,7,8,9).管道(
bufferHistory(3)//console.log(v));
//开始
// [1]
// [2,1]
// [3,2,1]
// [4,3,2]
// [5,4,3]
// [6,5,4]
// [7,6,5]
// [8,7,6]
// [9,8,7]
//竞争
我找不到Rxjs 6的运算符来执行此操作,最近的运算符是bufferCount()
,但它会在发出每个数组后重置
数组输出的顺序实际上并不重要。它可以是
[3,2,1]
或[1,2,3]
,因为这只是现在的语义问题。您可以使用扫描
:
of(1, 2, 3, 4, 5, 6, 7, 8, 9).pipe(
scan((acc, val) => {
acc.unshift(val);
acc.splice(3);
return acc;
}, [])
).subscribe(v => console.log(v));
// [1]
// [2,1]
// [3,2,1]
// [4,3,2]
// [5,4,3]
// [6,5,4]
// [7,6,5]
// [8,7,6]
// [9,8,7]
或:
为了达到预期的效果,一个选项是使用map基于数字创建数组
import { of} from 'rxjs';
import { map, bufferCount} from 'rxjs/operators';
of(1,2,3,4,5,6,7,8,9).pipe(
map(x => Array.from(Array(x).keys(), n => n + 1).slice(-3))
).subscribe(v => console.log(v));
参考工作守则-
import { of} from 'rxjs';
import { map, bufferCount} from 'rxjs/operators';
of(1,2,3,4,5,6,7,8,9).pipe(
map(x => Array.from(Array(x).keys(), n => n + 1).slice(-3))
).subscribe(v => console.log(v));