Reputation: 90
I'm struggling with a simple RxJs query that I can't seem to wrap my head around. I can't seem to figure out how to merge Observables if they are wrapped inside an object. This example works as expected if I just directly return the Observable from flatMap, but I also need the name in my output. How can I achieve this?
I'm using RxJS 5.0.0-beta.2
Basic Data Structure:
var data = [
{
"name": "Test #1",
"users": [
{
"name": "John Doe",
"gender": "male"
},
{
"name": "John Doe",
"gender": "male"
},
{
"name": "Jane Doe",
"gender": "female"
}
]
},
{
"name": "Test #2",
"users": [
{
"name": "John Doe",
"gender": "male"
},
{
"name": "Jane Doe",
"gender": "female"
},
{
"name": "Jane Doe",
"gender": "female"
}
]
}
];
RxJs Function:
Observable.fromArray(data)
.flatMap(x => {
return Observable.of({
"name": x.name,
"count": Observable.fromArray(x.users)
.filter(x => x.gender == "male")
.count()
})
})
.toArray()
.subscribe(result => {
console.log(result);
});
Desired Result:
result = [
{
"name": "Test #1",
"count": 2
},
{
"name": "Test #2",
"count": 1
}
];
Actual Result:
result = [
{
"name": "Test #1",
"count": Observable
},
{
"name": "Test #2",
"count": Observable
}
];
Upvotes: 0
Views: 1427
Reputation: 1795
Observable.fromArray(data)
.flatMap(x => {
return Observable.of({
"name": x.name,
"count": x.users
.filter(x => x.gender == "male")
.length
});
})
.toArray()
.subscribe(result => {
console.log(result);
});
Upvotes: 1