0

Prods/$companyKeys/$prodKeys の形式でデータを管理した製品のフラット コレクションを取得する方法がわかりません

{
  "ID1" : {
    "prodID1" : {
      "name" : "Car"
    },
    "prodID2" : {
      "name" : "Door"
    },
    "prodID3" : {
      "name" : "Sandwich"
    }
  },
  "ID2" : {
    "ProdID4" : {
      "name" : "Glass"
    },
    "ProdID5" : {
      "name" : "Pen"
    }
  }
}

会社のIDを省略して、rxjsまたはAngularFire2自体に製品のコレクションを直接取得する簡単な方法はありますか? または、データを再配置する必要がありますか?

ありがとう

4

1 に答える 1

1

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して、オブジェクトのプロパティをさらに簡単にループすることができます。結果のストリームは、最初の要素がキーで、2 番目の要素がオブジェクト プロパティの値である配列です。

Rx.Observable.pairs(products)
    .flatMap(x => Rx.Observable.pairs(x[1]))
    .subscribe( x => console.log(x[0], x[1]));

これは、次のような配列を返します。

["prodID1", {name: "Car"}]
["prodID2", {name: "Door"}]
["prodID3", {name: "Glass"}]
["prodID4", {name: "Sandwich"}]
["prodID5", {name: "Pen"}]
于 2016-08-08T21:49:31.337 に答える