如何从 AngularFire2 中的 2 级向下键控列表中获取平面可观察列表
How to get flat observable list from 2 level down keyed list in AngularFire2
我无法弄清楚如何在 Prods/$companyKeys/$prodKeys 表格中管理我的数据的地方获取产品的平面集合
{
"ID1" : {
"prodID1" : {
"name" : "Car"
},
"prodID2" : {
"name" : "Door"
},
"prodID3" : {
"name" : "Sandwich"
}
},
"ID2" : {
"ProdID4" : {
"name" : "Glass"
},
"ProdID5" : {
"name" : "Pen"
}
}
}
在 rxjs 或 AngularFire2 本身中是否有一种简单的方法可以直接获取产品集合,省略公司 ID?还是我必须重新安排我的数据?
谢谢
Observable.flatMap
就是为了这样的目的而制作的(fiddle):
// turn products into array
var arr = [];
for(var key in products) {
arr.push(products[key]);
}
Rx.Observable.from(arr)
.flatMap(x => {
// 'x' is like object ID1, create array of products
var arr = [];
for (var key in x) {
arr.push(x[key]);
}
return Rx.Observable.from(arr);
})
.subscribe(x => document.write(JSON.stringify(x) + '</br>'));
输出:
{"name":"Car"}
{"name":"Door"}
{"name":"Glass"}
{"name":"Sandwich"}
{"name":"Pen"}
不确定您要如何处理键,但您可以使用 Observable.pairs
使遍历对象属性变得更加容易。生成的流是数组,第一个元素是键,第二个元素是对象属性的值:
Rx.Observable.pairs(products)
.flatMap(x => Rx.Observable.pairs(x[1]))
.subscribe( x => console.log(x[0], x[1]));
这个 returns 这样的数组:
["prodID1", {name: "Car"}]
["prodID2", {name: "Door"}]
["prodID3", {name: "Glass"}]
["prodID4", {name: "Sandwich"}]
["prodID5", {name: "Pen"}]
我无法弄清楚如何在 Prods/$companyKeys/$prodKeys 表格中管理我的数据的地方获取产品的平面集合
{
"ID1" : {
"prodID1" : {
"name" : "Car"
},
"prodID2" : {
"name" : "Door"
},
"prodID3" : {
"name" : "Sandwich"
}
},
"ID2" : {
"ProdID4" : {
"name" : "Glass"
},
"ProdID5" : {
"name" : "Pen"
}
}
}
在 rxjs 或 AngularFire2 本身中是否有一种简单的方法可以直接获取产品集合,省略公司 ID?还是我必须重新安排我的数据?
谢谢
Observable.flatMap
就是为了这样的目的而制作的(fiddle):
// turn products into array
var arr = [];
for(var key in products) {
arr.push(products[key]);
}
Rx.Observable.from(arr)
.flatMap(x => {
// 'x' is like object ID1, create array of products
var arr = [];
for (var key in x) {
arr.push(x[key]);
}
return Rx.Observable.from(arr);
})
.subscribe(x => document.write(JSON.stringify(x) + '</br>'));
输出:
{"name":"Car"}
{"name":"Door"}
{"name":"Glass"}
{"name":"Sandwich"}
{"name":"Pen"}
不确定您要如何处理键,但您可以使用 Observable.pairs
使遍历对象属性变得更加容易。生成的流是数组,第一个元素是键,第二个元素是对象属性的值:
Rx.Observable.pairs(products)
.flatMap(x => Rx.Observable.pairs(x[1]))
.subscribe( x => console.log(x[0], x[1]));
这个 returns 这样的数组:
["prodID1", {name: "Car"}]
["prodID2", {name: "Door"}]
["prodID3", {name: "Glass"}]
["prodID4", {name: "Sandwich"}]
["prodID5", {name: "Pen"}]