javascript - RxJs - 具有 Observable 属性的 FlatMap 对象

标签 javascript typescript rxjs

我正在努力处理一个简单的 RxJs 查询,我似乎无法理解它。如果 Observables 被包装在一个对象内,我似乎无法弄清楚如何合并它们。如果我直接从 flatMap 返回 Observable,则此示例将按预期工作,但我还需要输出中的名称。我怎样才能实现这个目标?

我正在使用 RxJS 5.0.0-beta.2

基本数据结构:

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

实际结果:

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

最佳答案

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

关于javascript - RxJs - 具有 Observable 属性的 FlatMap 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362900/

相关文章:

javascript - 我们如何以编程方式操作 `neo-app.json`?

php - 在外部链接上执行跟踪脚本

javascript - 如何在 *ngFor 中获取 *ngIf 的第一个真值

http - Angular2 http.get()、map()、subscribe() 和可观察模式——基本理解

javascript - 如何让评论显示在所有帖子下

javascript - jQuery:取消绑定(bind)事件处理程序以稍后再次绑定(bind)它们

jquery - Angular - 数据表 : TypeError: Cannot read property 'nodeName' of null

angular - 如何取消/取消订阅 Angular 4+ 中所有待处理的 HTTP 请求

javascript - 等待用 RxJs 解决的 promise

rxjs - 顺序执行可观察项并发出一个结果