Arrays 将一种类型的可观测数组映射到另一种类型的可观测数组

Arrays 将一种类型的可观测数组映射到另一种类型的可观测数组,arrays,angular,rxjs,observable,Arrays,Angular,Rxjs,Observable,我正在开发一个从REST服务获取数据的数据服务。是否有一种方法可以接收一种类型的对象数组的可观测值,但返回另一种类型数组的可观测值?我想这就是mergeMap所做的,但我在理解如何实现这一点上遇到了困难 大概是这样的: @Injectable() export class MyDataService { constructor(private http: HttpClient) { } getThings(): Observable<B[]> { return th

我正在开发一个从REST服务获取数据的数据服务。是否有一种方法可以接收一种类型的对象数组的可观测值,但返回另一种类型数组的可观测值?我想这就是mergeMap所做的,但我在理解如何实现这一点上遇到了困难

大概是这样的:

@Injectable()
export class MyDataService {
  constructor(private http: HttpClient) { }

  getThings(): Observable<B[]> {
    return this.http.get<A[]>(url)
    mergeMap(x => [x + <B>{foo: x.bar});
  }
}
@Injectable()
导出类MyDataService{
构造函数(私有http:HttpClient){}
getThings():可观察{
返回此.http.get(url)
mergeMap(x=>[x+{foo:x.bar});
}
}

在C#中,我只需要使用LINQ表达式来选择一个新对象。我如何在Angular中执行相同的操作?也许服务可以简单地返回类型a的可观察数组,订阅服务的使用者可以以某种方式处理映射?这是更好的方法吗?

这取决于您要映射的内容/位置。例如,您可以键入hint
.map
运算符:

.map<A, B>(v => /* transform A to B */)

我发现我必须做两次映射才能得到我想要的。第一个映射调用'x'是a[]。但是我需要将每个a都更改为B,所以我映射了x,并在第二个映射中使用y变量返回了一个新的B。有没有更好的方法?
.map(x=>x.map(y=>{foo:bar}))
我想你也可以返回
.map(x=>x.map(y=>{foo:bar}))作为B[]
,哪一种可能更具可读性
.mergeMap<A, B>(v => /* transform A to Observable<B> */)