将可观察对象合并到另一个可观察对象

时间:2016-10-10 21:33:15

标签: angular rxjs observable

说我有以下两个对象:

obj1 = {
  dataId: 1,
  item: {}
} 

obj2 = {
  id: 1,
  data: { a: 1, b: 2, c: 3 }
}

然后我有2个可观察对象,它们包含上述类型的对象数组:

Observable<obj1[]>
Observable<obj2[]>

有没有办法使用rxjs将2个observable合并到一个新的observable中,如果Ids彼此相等,那么obj2的数据会映射到对象1中的item字段?因此,上面的对象会产生一个可观察到的对象:

newObj = {
  id: 1,
  item: { a: 1, b: 2, c: 3 }
}

第二个observable将始终包含第一个observables dataId字段的匹配id,并且可能有许多dataIds具有相同的值,但第二个observable中的id将始终是唯一的。

1 个答案:

答案 0 :(得分:1)

您可以在RxJS中执行此操作,但您需要自己实现匹配部分。使用combineLatest(https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/combinelatest.md),您可以组合两个流。在resultSelector函数中,您可以编写逻辑来实际合并两个数组。

//伪代码

 Rx.Observable.combineLatest(firstObs$, secondObs$, (first, second) => {
  // write the combining logic here and return the result
 });