【问题标题】:Transform the array of objects returned as Observable转换作为 Observable 返回的对象数组
【发布时间】:2019-11-20 14:33:51
【问题描述】:

有小的修正。 我们返回的是 Object[] 而不是 Object。 方法签名也更改如下 - 我有一个返回Observable 的方法,如下所示-

 getData(url: string): Observable<Object[]> {

    return this.http.get<Object[]>(url);
  }

Object 如下所示:

{

  property1 : value1 
  property2 : value2 
  property3 : "" // no value right now 
}

我想做的是:

return Observable&lt;Object[]&gt;请注意同一对象

对象如下:

{

  property1 : value1 
  property2 : value2 
  property3 : value1 + value2; //combine property1 and property2 values 
} 

我们怎样才能做到这一点?

我知道我们必须使用rxjs map operator,但我们如何使用它?

urlTransforming Observable with .map 讲的是转换 Array 而不是 Map

我们如何在 Observable 上使用 Map operator 来实现这一点?

【问题讨论】:

  • 你的意思是喜欢this吗?
  • .map(obj =&gt; ({...obj, property3: obj[property1] + obj[property2]})
  • 您的方法签名不是 TypeScript,看起来更像 C# 或 Java,所以这不是有效的 Angular 代码。按照您的描述返回对象有什么问题?
  • 问题已编辑。可以看看吗?

标签: angular rxjs6


【解决方案1】:

好的,你需要先映射Observable的数据才能订阅。

有一个函数叫pipe,用来修改Observable的数据,返回一个Observable

对于您的情况:

Observable<Object> getData(){
    // let assume your observable is called getObs
    return getObs.pipe(
        map(objs => objs.map(obj => {
            obj[property3] = obj[property1] + obj[property2]);
            return objs;
        })
        )
    )
}

顺便说一句,所有rxjs/operators 都必须在pipe 函数内调用,而不仅仅是map

【讨论】:

  • 好的,现在检查一下
猜你喜欢
  • 1970-01-01
  • 2018-07-08
  • 2017-08-15
  • 2021-11-26
  • 1970-01-01
  • 2020-07-20
  • 2023-03-12
  • 2021-12-04
  • 2020-12-16
相关资源
最近更新 更多