Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象的Firebase对象转换为JavaScript/Typescript数组_Javascript_Json_Firebase_Firebase Realtime Database_Angularfire - Fatal编程技术网

将对象的Firebase对象转换为JavaScript/Typescript数组

将对象的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

我正在使用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

    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里吗?是的,明白了!谢谢: