根据对象值对可观察对象数组进行排序

时间:2019-04-16 07:27:12

标签: javascript arrays angular rxjs google-cloud-firestore

我要从Firestore返回一个Observable数组,并想按我在数据库对象内创建的索引对它们进行排序。

它们像这样存储在数据库中:

enter image description here

然后,它们将根据键ID的顺序显示在UI中(按字母顺序),但是,我希望它们根据索引在UI中进行排序。但是,我确实需要将id保留为初始密钥。

我曾尝试将值映射并使用sort()按下面的ode所示按索引排序,但是仍然以随机顺序返回。

这就是我使用map尝试按index的键值进行排序的方式。

this.bedrooms$ = this.property$.pipe(
     flatMap((property: any) => this._property.getAllBedrooms(property.bedrooms, this.propertyId))
   );


   this.sortedBedroom$ = this.bedrooms$.pipe(
     map((room: any) => {
      return room.sort((a: any, b: any) =>
          b.index - a.index
       );
     }
     )
   );

1 个答案:

答案 0 :(得分:0)

您的问题可能与该行b.test - a.index而不是b.index - a.index有关。

我将为此提出另一种解决方案,即使用AngularFirestore中的@angular/fire从Firestore排序数据:

this.afs.collection<Bedroom>('bedrooms', ref => ref.orderBy('index'))