将Observable的输出从Object转换为Array

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Observable的输出从Object转换为Array相关的知识,希望对你有一定的参考价值。

我有一个Cloud Firestore文档,它应该是一个对象数组。看起来像这样

docname: {
  0: {...}
  1: {...}
  2: {...}

这是预期的,因为我填写了这样的文档

myDocRef.set( {...user.myArray});

我遇到的问题是当我从文档中检索数据时。我现在这样做

getUserItems(uid) {
  return this._db.doc<MyObj>(`users/${uid}/mysubcollection/items`).valueChanges(); 
}

返回一个对象的对象,我需要它是一个对象数组,以便我可以使用forEach()

我尝试使用map()运算符,但它给了我一些我不理解的结果。

所以,我的目标是将对象的对象转换为对象数组,我尝试了这个

items$.pipe(
      tap(item => console.log('before map', item )),
      map(item => [item]),
      tap(item => console.log('after map', item ))
    )
    .subscribe(...);

这样做有点工作,因为它将对象的对象转换为对象数组,但当然它将所有对象放入两个dim数组的第一个dim中,看起来像这样

Array [Object(9)]

我在这里可以做什么来将对象的对象转换为对象数组,以便我的最终结果是这样的

Array(9) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} ]

所以从这里开始

Object(9) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} ]

对此

Array(9) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} ]
答案

如果数组中项目的顺序无关紧要,您可以使用Object.values

const objectOfObjects = {
  0: { name: "Zero" },
  1: { name: "One" },
  2: { name: "Two" },
  3: { name: "Three" }
};
const unorderedArray = Object.values(objectOfObjects);
console.log(unorderedArray);

以上是关于将Observable的输出从Object转换为Array的主要内容,如果未能解决你的问题,请参考以下文章

如何将 RxSwift 的 Single 转换为 Observable 并忽略“完成”事件?

Angular Firebase将Observable转换为普通对象以在组件内使用数据

如何以角度将 JSON 对象数组转换为 Observable 数组

在 AngularFire 中检索嵌套 Firestore 查询的 RxJS Observable

将数据表字符串从Azure ML WS转换为实际的Datatable C#Object?

如何将 Observable 转换为 ReplaySubject?