rxjs5 扁平化进阶示例

Advanced example of rxjs5 flattening

我有类似的数据结构:

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'
    }

归档此内容的简洁实用方法是什么?谢谢...

最简单的方法就是使用 concatMap() 将使用 Rx.Observable.from 创建的内部 Observable 与使用其父 ID 更新的用户列表合并。

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

已经有很多类似的问题了:

  • RxJS: JSON data with an array, processing each item further in the stream