我有一个以下格式的响应对象:
{
'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应用于对象的特定部分并保持其余部分不变?
答案 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;
});