【发布时间】:2017-04-16 13:00:36
【问题描述】:
我在我的 Angular2 应用程序中使用 Firebase 从我的数据库中检索数据。最简单的方法是在嵌套的 tags 列表中返回一组唯一值? IE。在我的示例中,我想返回 ["Sport", "Adventure", "Music"],其中省略了第二个 "Adventure"。
{
"images": {
"image1": {
"path": "path",
"date": 43534532123,
"tags": {
0: "Sport",
1: "Adventure"
}
},
"image2": {
"path": "path",
"date": 43534532123,
"tags": {
0: "Music",
1: "Adventure"
}
}
}
我尝试了这种方法,但它似乎只从第一张图片中分割元素
return this.af.database.list('/photos/user')
.map(photos => photos.map(photo => photo.tags))
.concatAll()
.distinct()
但是,这种方法会产生正确的输出,但作为唯一标签的单独流而不是一个数组
return this.af.database.list('/photos/user')
.map(photos => photos.map(photo => photo.tags))
.mergeAll()
.mergeAll()
.distinct()
【问题讨论】:
-
我的错,应该是image1和image2
-
老实说,你可能甚至不需要任何特殊的可观察魔法……你的
map函数可以从 API 中获取对象并将其减少到该数组中。它的所有逻辑都可以放在map回调中。 Observable 本身的操作符更适合操作数据流,而不是流中的数据。细微的差别,但很重要。这就是为什么我认为在map的回调中可以简单地处理数据。您不需要distinct排放,您需要更改实际数据。 -
为了提高问题的质量,请澄清 observable
this.af.database.list('/photos/user')的结构。定义类型和成员。
标签: javascript angular firebase firebase-realtime-database observable