Я пытаюсь добавить данные в вызов API карты. Я использую Rx JS для создания наблюдаемой и хочу добавить эти данные перед подпиской. Несмотря на то, что я могу сделать это после этого, это означает, что мне нужно будет подписаться на данные, что отличается от того, как я делаю это с остальными моими поставщиками услуг.
У меня есть вызов API, site.com/api с типом данных карты. Для краткости я сведу данные к тому, что имеет значение. Он возвращает такой формат, как карта, см. Ниже
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'
]
}
Что странно, потому что я подумал, что go отображает каждый элемент один раз, так что код через go пройдет, получит ключи первого элемента, а затем изменить его значение.
Некоторые онлайн-ответы используют pluck для изменения значений ключей карты, но это означает, что вы знаете, что это за ключ. Мои ключи карты являются динамическими c, и даты будут меняться, поэтому я не могу использовать этот подход. Другие примеры онлайн - это не карта, а массив.
РЕДАКТИРОВАТЬ
Ожидаемые результаты
{
'2020-01-01': {
name: 'test';
month: 'Jan';
season: 'Summer';
},
'2020-01-02': {
name: 'hi';
month: 'Feb';
season: 'Summer';
}
}
РЕДАКТИРОВАТЬ Я просто настроил другие свои функции для использования массива объекты вместо карты. Может кто-нибудь закрыть этот вопрос?