将RxJS中的map运算符仅应用于Object的一部分

时间:2018-01-12 17:38:24

标签: angular rxjs observable

我有一个以下格式的响应对象:

{
'akey':'avalue',
'bkey':'bvalue',
'ckey':'cvalue',
'arrKey':[{'a':'A','t':1},{'b':'B','t':2},{'c':'C','t':3}]
}

我想将RxJS中的地图运算符仅应用于' arrKey'的元素。如下所示:

this.http.get(url)
.map(res=>res.json())
.map(res['arrKey']=>res['arrKey']['t']=res['arrKey']['t']*2)
订阅

后的

{
'akey':'avalue',
'bkey':'bvalue',
'ckey':'cvalue',
'arrKey':[{'a':'A','t':2},{'b':'B','t':4},{'c':'C','t':6}]
}

是否有一个函数将map应用于对象的特定部分并保持其余部分不变?

2 个答案:

答案 0 :(得分:2)

它可以像.map(res => res.json()).pluck('arrKey').map(transformFn)一样简单,但我认为你要问的是你想要对arrKey进行转换并传递所有其他属性。您可以将此作为.map

内的同步逻辑操作
.map(res => res.json())
.map(response => {
  response.arrKey = response.arrKey.map(arrKey => ({ ...arrKey, t: arrKey.t * 2 }));
  return response;
});

答案 1 :(得分:2)

如果您希望从map方法发出完整响应,则需要返回整个响应,但需要在map方法中修改它。

.map(res => {
    res['arrKey'].forEach(item => {
        item['t'] = item['t'] * 2;
    });
    return res;
});