gpt4 book ai didi

javascript - 在 Rxjs 6 中将以前的值作为数组发出?

转载 作者:行者123 更新时间:2023-12-01 00:37:16 25 4
gpt4 key购买 nike

我需要一个可观察的对象,它发出一组先前值,最多 X 个值。

基本上,类似于 bufferCount()只是我希望它立即发出并保留运行历史记录。

of(1,2,3,4,5,6,7,8,9).pipe(
bufferHistory(3) // <-- something like this
).subscribe(v => console.log(v));
// starts
// [1]
// [2,1]
// [3,2,1]
// [4,3,2]
// [5,4,3]
// [6,5,4]
// [7,6,5]
// [8,7,6]
// [9,8,7]
// competes

我找不到 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]

或者:

of(1, 2, 3, 4, 5, 6, 7, 8, 9).pipe(
scan((acc, val) => {
acc.push(val);
return acc.slice(-3);
}, [])
).subscribe(v => console.log(v));
// [1]
// [1,2]
// [1,2,3]
// [2,3,4]
// [3,4,5]
// [4,5,6]
// [5,6,7]
// [6,7,8]
// [7,8,9]

关于javascript - 在 Rxjs 6 中将以前的值作为数组发出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58018134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com