将对象的Firebase对象转换为JavaScript/Typescript数组
我正在使用Firebase和Ionic3/Angular4应用程序 Firebase实时数据库中的数据如下所示:将对象的Firebase对象转换为JavaScript/Typescript数组,javascript,json,firebase,firebase-realtime-database,angularfire,Javascript,Json,Firebase,Firebase Realtime Database,Angularfire,我正在使用Firebase和Ionic3/Angular4应用程序 Firebase实时数据库中的数据如下所示: o.dishes = Object.keys(o.dishes).map(key => o.dishes[key]) 使用下面的TS代码,我正在从Firebase检索可观察数据 getDishesCategories(uid: string) { // 1. Fetch an observable AngularFire database snapshot
o.dishes = Object.keys(o.dishes).map(key => o.dishes[key])
使用下面的TS代码,我正在从Firebase检索可观察数据
getDishesCategories(uid: string) {
// 1. Fetch an observable AngularFire database snapshot
const afDishCategoriesList$ = this.database.list<DishCategory>(`/users/${uid}/dishcategories/`).snapshotChanges()
// 2. Map the AF list to an observable list of dish category objects
const dishCategoriesList$ = afDishCategoriesList$.pipe(map(changes => {
return changes.map(c => ({
...c.payload.val()
}))
}))
// 3. return the observable list of dish objects
return dishCategoriesList$
}
问题是“碟形”数据仍然作为JSON接收,带有Firebase键,值作为对象
我正在尝试将对象的“displays”对象映射到一个标准数组中,这样我就可以调用像.length这样的方法,并使用索引而不是键
这就是我正在尝试的映射到数组的碟子:
[{
createdDate: "2018-12-14T15:59:25.345Z",
dishes: [ {name: "Dish 1", selected: true} ],
id: "default01",
name: "All Dishes",
selected: true,
toggleDisabled: true
}]
这里我不需要Firebase键,只需要一个bog标准的零索引数组,每个盘在每个索引处存储为一个对象。只是无法想象如何做到这一点,因为我是新来的。地图,我已经盯着它看了几个小时了
有人能帮忙吗
谢谢 这只是JavaScript中的一个简单数据转换。并构建一个仅包含这些属性值的数组。然后用新数组覆盖原始属性。对于数组中的每个对象o,如下所示:
o.dishes = Object.keys(o.dishes).map(key => o.dishes[key])
如果您针对的是较新版本的JavaScript,那么使用o.disks=Object.valueso.disks可以更轻松地做到这一点。我认为如果您使用JSON风格的语法,而不是屏幕截图,清楚地定义您拥有的对象的结构,以及您想要的对象的结构,那么就更容易了。你可能只需要执行一些从一件事到另一件事的基本翻译。哦,嘿,道格!我一直在看你的视频-真的很有帮助,非常感谢这些:。好的,我明天会加上这个细节,今晚我要休息一下!CheersOK无法控制自己!我编辑了《道格邮报》的原文,这能让它更清晰吗?提前感谢;啊,当然!我明天早上试试。感谢您的帮助,非常感谢:嗨,Doug,o.disks=Object.keyso.disks.mapkey=>o.disks[key]在订阅dishCategoriesList$数据并对类别运行forEach循环时工作得非常好。理想情况下,我希望在上面getDishesCategories方法的第2步中映射时执行此转换-因此,当我从应用程序中的任何位置订阅数据时,数据已经正确转换。我不能让它工作。我很欣赏这是基本的东西,但迭代对象属性和使用映射对我来说真的很陌生。谢谢难道你不把它放进你传给管道的lambda里吗?是的,明白了!谢谢: