【发布时间】:2020-03-26 13:21:11
【问题描述】:
我正在尝试将数据添加到地图 api 调用。我使用 RxJS 创建一个 observable 并希望在订阅之前添加此数据。即使之后我可以做到,这意味着我需要订阅数据,这与我对其他服务提供商的操作方式不同。
我有一个 API 调用,“site.com/api”,它具有地图数据类型。为简洁起见,我将把数据简化为重要的内容。它返回类似 Map 的格式,见下文
interface input {
name: string;
month: string;
season?: string
}
data = {
'2020-01-01': {
name: 'test';
month: 'Jan';
},
'2020-01-02': {
name: 'hi';
month: 'Feb';
}
}
我想要知道如何映射它以添加季节。现在,我的代码可以正常工作,但不是为每个单独的地图元素添加季节,而是完全创建了一个新元素。
const req = this.http.get<any>('site.com/api')
.pipe(
map((data) => {
// Get data keys and associated data key to be all it's current values and add season
const transformedData = Object.keys(data).map(key => data[key] = {
...data,
season: 'Summer'
});
return transformedData;
}),
);
例如
{
0: [
'2020-01-01': {...},
'2020-01-02': {...},
'season': 'Summer'
]
1: [
'2020-01-01': {...},
'2020-01-02': {...},
'season': 'Summer'
]
}
这很奇怪,因为我认为 map 会遍历每个元素一次,因此代码会遍历,获取第一个元素的键,然后修改它的值。
一些在线答案使用 pluck 来修改映射键值,但这意味着您知道键是什么。我的地图键是动态的,日期会改变,所以我不能使用这种方法。网上的其他例子不是 map ,只是一个数组。
编辑
预期结果
{
'2020-01-01': {
name: 'test';
month: 'Jan';
season: 'Summer';
},
'2020-01-02': {
name: 'hi';
month: 'Feb';
season: 'Summer';
}
}
编辑 我只是调整了其他函数以使用对象数组而不是 map 。有人可以结束这个问题吗?
【问题讨论】:
标签: angular typescript rxjs angular9