These are the input observables:
items$ = of([
{name: 'John', age: 30, job: 'Dentist', address: {street: 'Maple (6,103)', country: 'US'},
{name: 'Mark', age: 34, job: 'Driver', address: {street: 'Pine (6,170)', country: 'US'}},
{name: 'Johannes', age: 25, job: 'Mechanic', address: {street: 'Elm (5,233)', country: 'US'}},
{name: 'Thjoma', age: 28, job: 'Coder', address: {street: 'Lake (4,901)', country: 'US'}},
])
fields$ = of([
name, age, street
])
How to map above observables fields to a new object for each item and return new array?
Expected Result:
of([
{name: 'John', age: 30, job: 'Dentist', street: 'Maple (6,103)'},
{name: 'Mark', age: 34, job: 'Driver', street: 'Pine (6,170)'},
{name: 'Johannes', age: 25, job: 'Mechanic', street: 'Elm (5,233)'},
{name: 'Thjoma', age: 28, job: 'Coder', street: 'Lake (4,901)'},
])
See the inside items (street) are mapped/ flattened to get new object for each items.
I've tried out something like this: But it is not working.
return combineLatest(
this.items$,
this.fields$,
(items, fields) => ({ items, fields })
).pipe(
map(({ items, fields }) =>
fields.reduce(
(acc, cur) => ({ ...acc, [cur]: items.map((item) => item[cur]) }),
{}
)
)
);
Can someone help?
SEE THAT
Only fields from the observable fields$ is appearing in the resulting observable. Others are omitted.