将一个observable数组映射到switchMap内的一个对象数组

时间:2018-04-09 20:40:23

标签: angular rxjs observable google-cloud-firestore

我目前正在使用switchMap和combineLatest将我的一个属性从引用更改为字符串。我设置了一个自定义管道(refPipe),它接受一个引用并返回该引用的observable。下面的方法工作得很好,但我有另一个属性(data.employees),它是一个引用数组。在这种情况下,如何迭代该数组并将其转换为员工对象数组?

为了澄清,我通常在html中使用我的ref管道以及异步,但是当在表格中进行过滤和排序时这不起作用,所以我在将数据传递给表之前对数据进行了不同的映射。 / p>

getClientEvents(): Observable<Event[]> {
    const eventsCollection = this.afs.collection<Event>('events');

    return eventsCollection.snapshotChanges().switchMap(events => {
      let arrayOfObservables = events.map(e => {
        const data = e.payload.doc.data() as Event;
        const id = e.payload.doc.id;
        return this.refPipe.transform(data.item).map(item => {
          data.item = item.name;

          data.employees // My array of references that I need to convert

          return { id, ...data };
        });
      });
      return Observable.combineLatest(arrayOfObservables);
    });
  }

1 个答案:

答案 0 :(得分:0)

  

在这种情况下,如何迭代该数组并将其转换为员工对象数组?

你有两个选择。您可以输入assert:

someVar: Array<Employee> = data.employees as Array<Employee>

或者,如果您需要点击Employee构造函数:

someVar: Array<Employee> = data.employees.map(e => new Employee(e.a, e.b))