Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Rxjs 6中以数组形式发出以前的值?_Javascript_Angular_Rxjs_Rxjs6 - Fatal编程技术网

Javascript 在Rxjs 6中以数组形式发出以前的值?

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的运算符来执行此操作

我需要一个可观测的,发射一个数组的先前值高达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的运算符来执行此操作,最近的运算符是
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));