2016-04-01 22 views
0

単純なRxJsクエリに悩まされています。オブザーバブルがオブジェクトの中にラップされている場合、オブジェクトをマージする方法を理解できないようです。このサンプルは、flatMapからObservableを直接返すだけで動作しますが、出力にも名前が必要です。どうすればこれを達成できますか?観測可能なプロパティを持つRxJs - FlatMapオブジェクト

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機能:

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); 
    }); 

望ましい結果:

result = [ 
    { 
     "name": "Test #1", 
     "count": 2 
    }, 
    { 
     "name": "Test #2", 
     "count": 1 
    } 
    ]; 

私は-beta.2 5.0.0

基本データ構造をRxJSを使用しています

実際の結果:

result = [ 
    { 
     "name": "Test #1", 
     "count": Observable 
    }, 
    { 
     "name": "Test #2", 
     "count": Observable 
    } 
    ]; 

答えて

1
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); 
}); 
関連する問題