Javascript 将可观测数组值累积到单个最终数组中

Javascript 将可观测数组值累积到单个最终数组中,javascript,rxjs,observable,Javascript,Rxjs,Observable,如果我有两个可观察数组,x$和y$: let x = new BehaviorSubject([1,2,3]) let y = new BehaviorSubject([4,5,6]) let x$ = x.asObservable(); let y$ = y.asObservable(); 我想将其累积到一个值数组中,这样当订阅时将发出[1,2,3,4,5,6],我如何实现这一点 如果这么简单,您可以使用scan()收集所有值。源是什么都不重要,所以你可以合并两个观测值: Observabl

如果我有两个可观察数组,
x$
y$

let x = new BehaviorSubject([1,2,3])
let y = new BehaviorSubject([4,5,6])
let x$ = x.asObservable();
let y$ = y.asObservable();

我想将其累积到一个值数组中,这样当订阅时将发出
[1,2,3,4,5,6]
,我如何实现这一点

如果这么简单,您可以使用
scan()
收集所有值。源是什么都不重要,所以你可以合并两个观测值:

Observable.merge(x, y)
  .scan((acc, arr) => [...acc, ...arr], [])
  .subscribe();

如果是这么简单,您可以使用
scan()
收集所有值。源是什么都不重要,所以你可以合并两个观测值:

Observable.merge(x, y)
  .scan((acc, arr) => [...acc, ...arr], [])
  .subscribe();

这取决于您是希望等到它们都完成,还是希望在它们到达时累积值。当您调用
x.next(7)
时,您期望发生什么?我希望它们在收到时累积。我希望
[1,2,3,4,5,6,7]
,所以有时候你会推送数组,比如
x.next([1,2,3])
,有时候推送单个值,比如
x.next(7)
?我现在明白为什么这很麻烦了。我想我可以访问完整的值数组,因此我希望
x.next([1,2,3,4])
y.next([4,5,6,7])
发出
[1,2,3,4,4,5,6,7]
这取决于您是想等到它们都完成还是想在它们到达时累积值。当您调用
x.next(7)
时,您期望发生什么?我希望它们在收到时累积。我希望
[1,2,3,4,5,6,7]
,所以有时候你会推送数组,比如
x.next([1,2,3])
,有时候推送单个值,比如
x.next(7)
?我现在明白为什么这很麻烦了。我想我可以访问完整的值数组,因此我希望
x.next([1,2,3,4])
y.next([4,5,6,7])
发出
[1,2,3,4,4,5,6,7]
如果我附加到现有数组,您的响应将是正确的,但由于我提供了完整的数组,这会导致重复,因此您不希望在值到达时累积值,而是从两个观察值中合并两个最新值:)。如果我附加到现有数组,您的响应将是正确的,但因为我提供了完整的数组,这会导致重复,因此您不希望在值到达时累积值,而是从两个观察值中合并最近的两个值:)。