угловой / FireBase формат извлекает данные из FireBase в массив - PullRequest
0 голосов
/ 03 мая 2020

Привет, ребята, у меня проблема с форматированием моих данных Firebase в массив

Это мой сервис, где я получаю данные из Firebase

имя файла: subcategory.service.ts

export class SubcategoryService {

  subcategoryRef: AngularFireList<any> = null;

  constructor(private db: AngularFireDatabase) {
   this.subcategoryRef = db.list("/subCategory");
  }

  getSubCategoriesById(inp_subCatid: string): Observable<any[]> {
    return this.subcategoryRef.snapshotChanges().pipe(
      take(1),
      map(changes => changes.map(c =>
        ({ key: c.payload.key, ...c.payload.val() })
      ).filter((subCat) =>
        subCat.catid === inp_subCatid
      )
    ));
  }
}

я вызываю функцию getSubCategoriesById () в следующем файле

имя файла: subcategory.page.ts

    this.SubcategoryService.getSubCategoriesById("cat01")
      .subscribe(subCategories =>
        this.subCat = Object.values(subCategories)
    )

структура объекта, которую я извлекаю, выглядит следующим образом

enter image description here есть массив, в котором есть один объект, в котором мои целевые объекты

, но я хотел бы отформатировать данные в виде следующей структуры

[
 alcoholic:{
             active:true,
             ageRating: true,
             catgeory: "cat01"
             ...
            },
 warmdrinks:{
             active:true,
             ageRating: false,
             catgeory: "cat01"
             ...
            },
 softdrinks:{
             active:true,
             ageRating: false,
             catgeory: "cat01"
             ...
            },
]

так что у меня есть массив с 3 объектами внутри.

моя база данных firebase для этого случая выглядит следующим образом

enter image description here

надеюсь, кто-то может мне помочь, если кому-то нужна дополнительная информация, пожалуйста, дайте мне знать

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Вы можете добавить карту в цепочку на последней карте массива, чтобы выбрать нужные атрибуты:

getSubCategoriesById(inp_subCatid: string): Observable<any[]> {
  return this.subcategoryRef.snapshotChanges().pipe(
      take(1),
      map(changes => changes.map(c =>
        ({ key: c.payload.key, ...c.payload.val() })
      ).filter((subCat) =>
        subCat.catid === inp_subCatid
      ).map(({alcoholic,softdrinks,warmdrinks,...rest}) => ({
        alcoholic,softdrinks,warmdrinks
      })
    ));
  }
0 голосов
/ 03 мая 2020

Я думаю, вы должны использовать valueChanges вместо snapshotChanges ()

return this.getSubCategoriesList().snapshotChanges().pipe(

до

return this.getSubCategoriesList().valueChanges().pipe(

valueChanges возвращает Observable данных документа. Метаданные удаляются.

Я предполагаю, что вы используете Angularfire ...

...