【问题标题】:Advanced example of rxjs5 flatteningrxjs5扁平化的高级示例
【发布时间】:2017-01-16 09:20:37
【问题描述】:

我有类似的数据结构:

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

归档此文件的简洁功能方式是什么?谢谢...

【问题讨论】:

    标签: javascript functional-programming rxjs rxjs5


    【解决方案1】:

    最简单的方法是使用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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-08
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      相关资源
      最近更新 更多