2017-01-16 1 views
0

меня подобную структуру данных для этого:Расширенный пример rxjs5 уплощение

let userInfo = [ 
     { 
     id: 'id1', 
     users: [ 
     { 
     name: 'userName1', 
     job: 'userJob', 
     }, 
     { 
     name: 'userName2', 
     job: 'userJob', 
     } 
     ] 
    }, 
     { 
     id: 'id2', 
     users: [ 
     { 
     name: 'userName3', 
     job: 'userJob', 
     }, 
     { 
     name: 'userName4', 
     job: 'userJob', 
     } 
     ] 
    } 
    ] 

Пользователи могут я ожидал новый поток сплющенные пользователя с RxJS5:

{ 
    parent: id,  // parent id, where users[] come from... 
    name: 'userName' 
    job: 'userJob' 
    } 

Что такое чистый функциональный способ архивировать это? Спасибо ...

ответ

0

Самый простой подход просто использовал бы concatMap() для объединения внутреннего наблюдаемого, созданного с помощью Rx.Observable.from, со списком пользователей, обновленным с их родительским идентификатором.

let userInfo = [ 
    { 
    id: 'id1', 
    users: [ 
     { 
     name: 'userName1', 
     job: 'userJob', 
     }, 
     { 
     name: 'userName2', 
     job: 'userJob', 
     } 
    ] 
    }, 
    {...} 
]; 

let source = Rx.Observable.from(userInfo) 
    .concatMap(group => { 
    return Rx.Observable.from(group['users']) 
     .map(user => { 
     user['parent'] = group.id; 
     return user; 
     }); 
    }); 

source.subscribe(
    res => console.log(res) 
); 

Смотреть демо: https://jsbin.com/miximas/2/edit?js,console

Там вы много подобный вопрос уже:

Смежные вопросы